加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 13:50:36 所属栏目:PHP教程 来源:网络整理
导读:问题:在任何已保存的输入字段上使用strip_tags并在任何显示的输出上运行htmlspecialchars以及使用 PHP PDO预处理语句阻止SQL注入时,是否阻止XSS(跨站点脚本)变得简单? 这是一个例子: // INPUT: Input a persons favorite color and save to database// th
问题:在任何已保存的输入字段上使用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');

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读