php - 防止服务器端脚本、XSS

标签 php mysql security xss

是否有任何预制脚本可用于 PHP/MySQL 以防止服务器端脚本和 JS 注入(inject)?

我知道一些典型的函数,例如 htmlentities、特殊字符、字符串替换等,但是是否有一些简单的代码或一个函数可以对所有内容进行故障保护?

任何想法都会很棒。非常感谢:)

编辑:去除任何可能有害的东西的通用词,即。大于/小于符号、分号、“DROP”等词?

我想我基本上只是想将所有内容压缩为字母数字,我猜...?

最佳答案

切勿将任何未通过 htmlspecialchars() 的数据输出到 HTML 流你就完成了。简单的规则,易于遵循,彻底消除任何 XSS 风险。

不过,作为一名程序员,的工作就是这样做。

你可以定义

function h(s) { return htmlspecialchars(s); }

如果htmlspecialchars()每个 PHP 文件写 100 次太长了。另一方面,使用 htmlentities()根本没有必要。


重点是:有代码,就有数据。如果将两者混在一起,就会发生坏事。

在 HTML 中,代码是元素、属性名、实体、注释。数据就是一切。数据必须转义以避免被误认为代码。

对于 URL,代码是方案、主机名、路径、查询字符串的机制(?&=#)。数据是查询字符串中的所有内容:参数名称和值。它们必须被转义以避免被误认为代码。

嵌入在 HTML 中的 URL 必须进行双重转义(通过 URL 转义 HTML 转义)以确保正确分离代码和数据。

现代浏览器能够将极其损坏和不正确的标记解析为有用的东西。不过,不应强调这种能力。某些事情恰好有效(例如 <a href> 中的 URL,但未应用适当的 HTML 转义)并不意味着这样做是好的或正确的。 XSS 是一个根源于 a) 人们没有意识到数据/代码分离(即“转义”)或草率的人和 b)人们试图聪明地知道他们不需要转义数据的哪一部分。

如果您确保不属于类别 a) 和 b),XSS 很容易避免。

关于php - 防止服务器端脚本、XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2965430/

相关文章:

mysql - 根据连接条件添加列

Java 网络启动 : howto share certificate with users

javascript - 在 Wordpress 中 Hook AJAX

php - 返回基于二维数组内容的 mysql 查询

mysql - 加载 NULL 值 INT

mysql - SQL - 在一个查询中更新多条记录

PHP WkHtmlToPdf 无法添加多个页面

php - 如何将 404 错误重定向到 404.php 页面?

php - 这是否正确使用 PDO 和准备好的语句来实现安全登录?

php - 为 FTP 存储通行证并与 PHP 进行安全通信