对于全球安全,用户POST或GET在php中使用htmlspecialchars或striptags是否安全?
例如,htmlspecialchars任何帖子并获取请求发送并将其保存到数据库
答案 0 :(得分:0)
出于显示目的,您可以使用htmlspecialchars()
或htmlentities()
来防范常见的XSS攻击。
不建议strip_tags()
数据(除非确实是必要的),因为如果用户提供了任何格式,可能会丢失所有格式。
答案 1 :(得分:0)
我会根据你期望得到的结果进行健全检查。
一个好的阅读(像往常一样)是OWASP的备忘单:https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet#XSS_Cheat_Sheet
如果您期望纯文本,请在Web客户端显示时始终使用htmlspecialchars()。一些模板引擎,比如Twig,默认已经这样做了。对于这种情况,我在保存到数据库时不会进行任何检查,因为您可能需要稍后对其他客户端进行不同的编码 - 而且您希望它是纯文本的,对吧?
如果用户有RTE并且可以使用HTML,我会使用strip_tags()或其他框架中使用的方法。一个例子是http://svn.openfoundry.org/wowsecmodules/trunk/filter/RemoveXSS.php。 TYPO3也有一个非常好的,你可以通过下载包并查看 typo3 / contrib / RemoveXSS / RemoveXSS.php 来查看
一种解决方法是使用像BB-Code或Markdown这样的东西,以纯文本形式处理,稍后在你的代码中编译成HTML,但是如果他不习惯这样的东西,这会使编辑器感到困惑。
我根本不推荐,但可以让浏览器完成工作 - 请参阅XSS Basic Understanding
修改强>
我在这里链接的用于从HTML数据中删除XSS的两个库都基于相同的库,但是已分叉到不同的项目中,社区应用了修复程序等等。这种方法的目标与你的一样,即便如此,我也不支持它,因为它听起来像是一个通用的解决方案:
Usage: Run *every* variable passed in through it.
* The goal of this function is to be a generic function that can be used to
* parse almost any input and render it XSS safe. ...
为什么我反对在每个输入变量上运行此方法?你没有想到你真正想要的东西。也许你只想要纯文本...在这种情况下,正如我之前在这里写的那样,你不需要这样做,但只需在HTML上下文中显示它时使用htmlspecialchars()。