永远不要将任何数据输出到尚未通过的HTML流中,htmlspecialchars()
并且您已完成.简单的规则,易于遵循,完全消除任何XSS风险.
但作为程序员,这是你的工作.
你可以定义
function h(s) { return htmlspecialchars(s); }
Run Code Online (Sandbox Code Playgroud)
如果htmlspecialchars()
太长,每个PHP文件写100次.另一方面,htmlentities()
根本不需要使用.
关键点是:有代码,有数据.如果你混淆了两者,那么坏事就会随之而来.
在HTML的情况下,代码是元素,属性名称,实体,注释.数据就是其他一切.必须转义数据以避免被误认为是代码.
在URL的情况下,代码是该方案,主机名,路径,查询字符串的机构(?
,&
,=
,#
).数据是查询字符串中的所有内容:参数名称和值.必须对它们进行转义以避免被误认为代码.
嵌入HTML中的URL 必须进行双重转义(通过URL转义和 HTML转义),以确保代码和数据的正确分离.
现代浏览器能够将令人惊讶的破碎和不正确的标记解析为有用的东西.但是,不应强调这种能力.事情发生的事实(比如<a href>
没有应用适当的HTML转义的URL )并不意味着这样做是好的或正确的.XSS是一个问题,其根源在于a)人们不知道数据/代码分离(即"逃避")或那些草率的人和b)试图聪明地知道他们不需要逃避哪些数据部分的人.
如果你确定不属于a)和b)类别,XSS很容易避免.
归档时间: |
|
查看次数: |
894 次 |
最近记录: |