PHP安全编程
1. 过滤输入数据
最重要的原则之一就是:“永远不要相信用户输入的任何数据。”过滤输入数据是防止SQL注入的有效方法。
function add_magic_quotes($array)
{
foreach ($array as $k => $v) {
if ( is_array($v) ) {
$array[$k] = add_magic_quotes($v);
} else {
$array[$k] = addslashes($v);
}
}
return $array;
}
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
function strip_slashes()
{
// If already slashed, strip.
if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep($_GET );
$_POST = stripslashes_deep($_POST );
$_COOKIE = stripslashes_deep($_COOKIE);
$_SERVER = stripslashes_deep($_SERVER);
}
$_GET = add_magic_quotes($_GET );
$_POST = add_magic_quotes($_POST );
$_COOKIE = add_magic_quotes($_COOKIE);
$_SERVER = add_magic_quotes($_SERVER);
}
2. 过滤输出数据
对任何要在HTML页面上显示的数据,必须经过过滤,否则就是引入了“跨站脚本攻击(XSS)”的危险。
$html = array();
$html['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8');
echo "Welcome, {$html['username']}.";
记得使用htmlentities 防止XSS。
3. 使用SESSION跟踪
对于需要授权才能访问的页面,记得使用SESSION验证用户权限。
$user = $_SESSION['user'];
if ($_SESSION['verified']) ...
4. 防止文件上传攻击
使用is_uploaded_file() 和 move_uploaded_file() 防止文件上传攻击
还可以使用filesize() 来校验文件的大小
5. 使用Token和时间戳
$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;
$_SESSION['token_time'] = time();
?>



Comments
No comments yet.