我配置了PHP,以便启用魔术引号并关闭注册全局变量.
我会尽力为我输出的任何来自用户输入的内容调用htmlentities().
我偶尔也会搜索我的数据库,以获取xss附带的常用内容,例如......
<script
Run Code Online (Sandbox Code Playgroud)
我还应该做些什么,以及如何确保我要做的事情总是完成.
Mic*_*cki 58
逃避输入并不是您成功实施XSS预防的最佳选择.还必须转义输出.如果你使用Smarty模板引擎,你可以使用|escape:'htmlall'
修饰符将所有敏感字符转换为HTML实体(我使用自己的|e
修饰符,它是上面的别名).
我的输入/输出安全方法是:
Jil*_*les 18
我认为在输入期间不应该逃避任何事情,只能在输出上.因为(大部分时间)你不能假设你知道数据的去向.例如,如果您的表单中包含稍后显示在您发送的电子邮件中的数据,则需要进行不同的转义(否则恶意用户可能会重写您的电子邮件标题).
换句话说,您只能在数据"离开"应用程序的最后时刻转义:
简而言之:
如果您在输入层转义数据(或者您需要再次对其进行转义等),则会出现Esp#3.
PS:我会提出不使用magic_quotes的建议,这些都是纯粹的邪恶!
Chr*_*der 12
有很多方法可以做XSS(参见http://ha.ckers.org/xss.html)并且很难捕捉到.
我个人将此委托给我正在使用的当前框架(例如Code Igniter).虽然不完美,但它可能比我手工制作的程序更有效.
Mat*_*ina 10
这是一个很好的问题.
首先,除了使其安全存储(例如放入数据库)之外,不要在输入上转义文本.这样做的原因是您希望保留输入的内容,以便您可以以不同的方式和位置进行上下文显示.在此处进行更改可能会影响以后的演示.
当你去展示你不应该存在的数据时.例如,如果javascript没有理由在那里搜索并删除它.一种简单的方法是使用strip_tags函数并仅显示您允许的html标记.
接下来,拿走你所拥有的并传递它的想法htmlentities或htmlspecialchars来改变那里的ascii字符.根据上下文和你想要的内容来做这件事.
我也建议关闭Magic Quotes.它已从PHP 6中删除,被认为是使用它的不良做法.详情请访问http://us3.php.net/magic_quotes
有关更多详细信息,请访问http://ha.ckers.org/xss.html
这不是一个完整的答案,但希望足以帮助您入门.
小智 5
模板库。或者至少,这是模板库应该做的。为了防止 XSS,所有输出都应该被编码。这不是主要应用程序/控制逻辑的任务,它应该完全由输出方法处理。
如果您在整个代码中使用 htmlentities(),则整体设计是错误的。正如您所建议的,您可能会错过一两个景点。这就是为什么唯一的解决方案是严格的 html 编码-> 当输出变量被写入 html/xml 流时。
不幸的是,大多数 php 模板库只添加自己的模板语法,而不关心输出编码、本地化、html 验证或任何重要的事情。也许其他人知道一个合适的 php 模板库?