php - 我应该在所有输出上使用 htmlentities() 吗? (防止XSS攻击)

标签 php mysql security xss

<分区>

Possible Duplicate:
What are the best practices for avoiding xss attacks in a PHP site
What are the common defenses against XSS?

我正在尝试使我编写的 PHP 应用程序安全,但对转义输出有疑问。一旦我了解到这样做可以防止 SQL 注入(inject),我就转而使用带有 PDO 的准备好的语句,而且似乎另一种主要的攻击类型是 XSS。我像这样为我的页面构建输出(假设变量中包含来自数据库的数据):

$output = '';

$output .= '
<div style="float: left; width: 800px;">
    <span>Name:</span><span> ' . $name . '</span>
    <span>Address:</span><span>' . $addr . '</span>
    <span>Time:</span><span>' . time() . '</span>
</div>';

$output .='[lots more html]';

所以,我的问题是,我是否应该在输出数据库中的每条数据周围使用 htmlentities()(一个典型的页面有几十个,有的可能是数百个来自正在输出的数据库的变量)?

最佳答案

使用 htmlentities() 有两个好处:

  • XSS 预防
  • 将特殊字符转换为正确的 HTML 实体,例如将版权字符转换为 ©。在 HTML 内容中,您应该使用适当的 HTML 实体,而不是插入原始特殊字符。

为了防止 XSS,您可以使用 htmlspecialchars()相反,它只会将一些基本字符转换为 HTML 实体,即引号、& 符号和小于/大于字符。

在回答您的问题时,您应该在输出任何可能包含用户输入或特殊字符的内容时使用 htmlentities()

关于php - 我应该在所有输出上使用 htmlentities() 吗? (防止XSS攻击),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13345545/

相关文章:

css - HTTPS 以及如何引用文件和图像

php - 使用 foreach 循环数组并将结果放入新数组中

php - 多重过滤器 PHPExcel

php - 在 woocommerce_before_calculate_totals Hook 中获取购物车小计

security - 如何在不破坏体验的情况下在服务器端加密用户的数据?

javascript - Tumblr 如何实现全局导航?

php - 出于安全原因,如何覆盖 php 内存?

MySQL 列默认值 - 优点/缺点,我应该用于所有列吗?

Mysql查询优化

c# - sql语法错误?在我的 c# img url 字符串中