【问题标题】:htmlspecialchars in PHPPHP中的htmlspecialchars
【发布时间】:2017-01-17 23:04:09
【问题描述】:

有人可以帮我在这段代码中添加 htmlspecialchars 以防止 XSS:

<?PHP
    if(isset($_POST['update'])) { 
        $ts=$_POST['ts'];
        $user=$_POST['user'];

        mysql_query("UPDATE users SET block_newfriends='". mysql_real_escape_string($ts). "'  WHERE username='" .mysql_real_escape_string($user) . "'");
        echo '<div class="rounded-container">';
        echo '<div class="rounded-green rounded-done">';
        echo '<b>reload</b><br>';
        echo '</div>';
        echo '</div>';
    }
?>

我不知道把它们放在哪里,应该在 POST 函数中吧?

【问题讨论】:

  • XSS 预防措施通常发生在信息输出而非输入上。但是,如果您想确保这两个 post 值在输入到数据库时没有 html 字符,您可以通过 htmlspecialchars 传递它们。
  • 是的,我想做那个标记,但你知道我如何将它们添加到我的脚本中吗?我不知道把它们放在哪里。
  • $ts = htmlspecialchars($_POST['ts']);对于用户变量也是如此。
  • 防止 XSS 攻击:stackoverflow.com/q/30280370/2298301。此外,mysql_ 函数容易发生 SQL 注入,您应该考虑使用 PDO 来防止这种情况发生
  • 谢谢马克,我已经改变了这两个变量。我需要添加更多吗?

标签: php css tags xss


【解决方案1】:

将 $ts 和 $user 行替换为:

$ts=htmlspecialchars($_POST['ts']);
$user=htmlspecialchars($_POST['user']);

然后不理会查询,它将在 htmlspecialchars 剥离值上使用mysql_real_escape_string()

【讨论】:

  • 谢谢帕特里克,我已经替换了这两行。我应该在这个脚本中做/添加更多内容还是足够了?
  • 这是个坏建议。您将对放入数据库的值进行 html 转义,然后,当您将其从数据库中取回时,您不确定您的屏幕输出(回显)函数是否需要转义它。始终将“原始”值保留在内存中,并在输出/插入数据库等时进行转换,这样您就不会感到困惑了。
【解决方案2】:

您需要根据自己的需要使用不同的功能使其安全:

当您输出到 HTML 时,通过包装 htmlspecialchars 使其“html 安全”。

echo 'Writing to browser ' . htmlspecialchars($_POST['t']);

当您输出到 SQL 时,通过将其转义为 sql 使其成为“sql-safe”(请参阅​​下面的注释)。

$sql = 'UPDATE table SET field="' . mysql_escape_string($_POST['t']);

当您输出到一个 URL 时,通过将其转义为 url,使其成为“url-safe”。

$link = 'http:/example.com?value=' . urlencode($_POST['t'])

类似的规则适用于 JSON 编码、输出到 XML 等。


关于 mySQL 的注意事项:您对它进行转义是正确的,但您使用的是 PHP 中不再存在的函数(因此您使用的是旧版本的 PHP)。检查手册中的mysqlipdo 并使用这些功能。

【讨论】:

  • 感谢 Robbie,我知道这是旧版本,但我现在的主机使用的是旧版本,我会尽快更新!我改变了这两个变量,你认为这就足够了吗?
  • mysqli 和 PDO 已经存在 10 年+;甚至任何主机上的“旧”版本的 PHP 都应该有它们。他们不会在一两年内拥有 mysql()。所以现在转换以节省您学习无效课程的时间。
  • 另请参阅我对帕特里克回答的评论:如果您 html-escape 然后插入数据库,您可能会忘记哪些值已被转义,哪些未转义。因此,在输出/插入数据库时​​保留“原始”值并转义/转换;然后你遵循一个简单的规则,总是逃避输出,不需要有选择地去做。当您稍微使用模板引擎时,它也会使转换更容易。
猜你喜欢
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2020-09-30
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
相关资源
最近更新 更多