php – 阻止XSS和SQL注入就像这样容易

前端之家收集整理的这篇文章主要介绍了php – 阻止XSS和SQL注入就像这样容易前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题:在任何已保存的输入字段上使用strip_tags并在任何显示输出上运行htmlspecialchars以及使用 PHP PDO预处理语句阻止sql注入时,是否阻止XSS(跨站点脚本)变得简单?

这是一个例子:

// INPUT: Input a persons favorite color and save to database
// this should prevent sql injection ( by using prepared statement)
// and help prevent XSS  (by using strip_tags)
$sql = 'INSERT INTO TABLE favorite (person_name,color) VALUES (?,?)';
$sth = $conn->prepare($sql);
$sth->execute(array(strip_tags($_POST['person_name']),strip_tags($_POST['color'])));


// OUTPUT: Output a persons favorite color from the database
// this should prevent XSS (by using htmlspecialchars) when displaying
$sql = 'SELECT color FROM favorite WHERE person_name = ?';
$sth = $conn->prepare($sql);
$sth->execute(array(strip_tags($_POST['person_name'])));
$sth->setFetchMode(PDO::FETCH_BOTH);
while($color = $sth->fetch()){
  echo htmlspecialchars($color,ENT_QUOTES,'UTF-8');
}
它更简单.只需在用户控制的输入上使用htmlspecialchars()(带引号样式和字符集)即可. strip_tags()仅在您希望在处理/保存数据库之前清理数据时才有用,这通常不会在现实世界中使用. HTML代码PHP代码中没有坏处,但是如果你在非消毒的用户控制输入或那种邪恶的东西上使用eval(),PHP代码可能会这样做.

然而,这并不能使你从SQL injections中解脱出来,但这是另一回事.

更新:要从请求中获取干净的用户输入以避免在用户控制的输入中使用magic quotes,您可以使用以下功能

function get_string($array,$index,$default = null) {
    if (isset($array[$index]) && strlen($value = trim($array[$index])) > 0) {
         return get_magic_quotes_gpc() ?  stripslashes($value) : $value;
    } else {
         return $default;
    }
}

可以用作:

$username = get_string($_POST,"username");
$password = get_string($_POST,"password");

(你可以为get_number,get_boolean,get_array等做simliar)

要准备SQL查询以避免SQL injections,请执行以下操作:

$sql = sprintf(
    "SELECT id FROM user WHERE username = '%s' AND password = MD5('%s')",MysqL_real_escape_string($user),MysqL_real_escape_string($password)
);

显示用户控制的输入以避免XSS,请执行以下操作:

echo htmlspecialchars($data,'UTF-8');
原文链接:/php/138905.html

猜你在找的PHP相关文章