php - mysql_real_escape_string 是否足以防止 HTML 注入(inject)?

标签 php mysql html

我想知道如何防止 HTML 注入(inject)。我创建了一个站点,允许用户以 HTML 形式粘贴文章。我使用了 mysql_real_escape_sting 但我想知道这是否足以防止 HTML 注入(inject)。我尝试了 htmlspecialchars 但它显示 mysql_real_escape_string 错误。

最佳答案

不, mysql_real_escape_sting 只准备要安全地插入到 MySQL 字符串声明中的数据,以防止在该特定上下文中进行 SQL 注入(inject)。它不会阻止其他注入(inject),例如 HTML 注入(inject)或跨站点脚本 (XSS)。

HTML 注入(inject)和 XSS 都发生在不同的上下文中,需要注意不同的上下文特殊字符。在 HTML 中特别是 < , > , & , " , 和 '分隔不同的 HTML 上下文。考虑到 XSS,您还需要了解不同的 JavaScript 上下文及其特殊字符。

htmlspecialchars 应该足以处理前一次攻击,而 json_encode 可用于 JavaScript 的安全子集。另见 XSS (Cross Site Scripting) Prevention Cheat Sheet以及my answer to Are these two functions overkill for sanitization?和相关问题以获取有关此主题的更多信息。

关于php - mysql_real_escape_string 是否足以防止 HTML 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6883310/

相关文章:

php - stream_socket_enable_crypto();禁用 stream_set_timeout

php - 在 YAML 文件中测试配置的位置

PHP - 图像快捷方式

php - mysql转义单引号和双引号

html - 由于网页对窗口大小的解释不正确,媒体查询失败

php - 通过 PHP 和 SQL 输出 XML

python - MySQL、fetchone 和 LIMIT

mysql - 选择查询算术计算

html - img-responsive 不居中

javascript - 跳过从循环 append 的相同元素