首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止PHP应用程序中的JavaScript注入

防止PHP应用程序中的JavaScript注入
EN

Stack Overflow用户
提问于 2010-07-21 07:51:16
回答 5查看 19.1K关注 0票数 10

需要采取哪些措施来防止或阻止PHP应用程序中发生JavaScript注入,从而不会泄露敏感信息( PHP /XHTML和JavaScript中的最佳实践)?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-21 08:00:03

一个不错的第一步是应用question Gert G linked中列出的方法。本文详细介绍了可在不同情况下用于清理输入的各种函数,包括mysql_real_escape_stringhtmlentities()htmlspecialchars()strip_tags()addslashes()

尽可能避免将用户输入直接插入数据库是一种更好的方法。使用whitelist input validation:在您只有有限选择范围的任何情况下,请从for insertion的硬编码值中选择,而不是从任何面向客户端的表单获取输入。基本上,这意味着只接受某些值,而不是试图消除/对抗邪恶/错误/恶意的输入。

例如:如果您有一个带有项目下拉列表的表单,请不要使用此下拉列表中的输入进行插入。请记住,恶意客户端可以编辑表单提交时发送的信息,即使您认为他们只有有限的选项。相反,让下拉菜单引用服务器端代码中数组中的索引。然后使用该数组选择要插入的内容。这样,即使攻击者试图向您发送恶意代码,它实际上也不会访问您的数据库。

显然,这不适用于自由格式的应用程序,如论坛或博客。对于这些,你必须退回到“第一步”技术。尽管如此,仍然有很多选项可以通过白名单输入验证来改进。

您还可以尽可能地使用parameterized queries (也就是带有绑定变量的预准备语句)进行sql交互。这将告诉您的数据库服务器,所有输入都只是一个值,因此它减轻了注入攻击带来的许多潜在问题。在许多情况下,这甚至可以涵盖自由格式的应用程序。

票数 10
EN

Stack Overflow用户

发布于 2010-07-21 08:38:39

通过默认处理您使用输出到html的任何值。

不使用htmlspecialchars()的唯一理由是当您需要输出到html字符串时,该字符串本身包含html。在这种情况下,您必须确保此字符串来自完全安全的来源。如果您没有这样的信心,那么您必须通过白名单html过滤器传递它,该过滤器只允许仔细限制标签、属性和属性值的集合。你应该特别注意属性值。你不应该允许所有的东西都作为属性值传递,特别是像src,hef,style这样的属性。

你应该知道在你的webapp中没有使用htmspeciachars()将任何东西输出到html的所有地方,确保你真的需要这些地方,并意识到尽管你对这些地方充满信心,但这些地方是潜在的漏洞。

如果你认为这太过谨慎了:“为什么我需要htmlspecialchar()这个变量,我知道它只包含整数,并释放了所有宝贵的CPU周期。”

记住这一点:你不知道,你只认为你知道,CPU周期是世界上最便宜的东西,几乎所有的周期都会浪费在等待数据库或文件系统甚至内存访问上。

此外,永远不要使用黑名单html过滤器。Youtube犯了这个错误,有人突然发现只有第一个<script>被删除了,如果你在评论中输入第二个,你就可以将任何Javascript注入访客浏览器。

类似地,为了避免SQL注入,请使用mysql_real_escape_string()处理粘贴到SQL查询的所有值,或者更好的做法是使用PDO Prepared语句。

票数 6
EN

Stack Overflow用户

发布于 2010-07-21 08:15:41

如果您没有传递任何需要格式化为html的内容,则使用:

代码语言:javascript
复制
strip_tags() <- Eliminates any suspicious html

,然后运行以下命令进行清理,然后保存到数据库。

代码语言:javascript
复制
mysql_real_escape_string() 

如果您的ajax保存用户通过文本框或所见即所得输入的html,那么可以考虑使用HTMLPurifier去掉javascript,但允许使用html标记。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3295291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档