首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式足以处理脚本注入吗?

问正则表达式足以处理脚本注入吗?
EN

Stack Overflow用户
提问于 2011-06-27 15:47:32
回答 3查看 271关注 0票数 0

您认为还有什么是防止表单注入、URL注入或任何其他类型的注入的好工具?

不是太具体的代码,只是大局。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-27 15:55:18

过滤您的输入/验证您的输出

就这样。为了避免脚本注入或任何其他类型的跨站点脚本,您需要确保网页上显示为文本部分的任何字符都不是5个特殊html字符中的任何一个。使用htmlspecialchars将它们编码为等效的html实体(正常显示,但不由html引擎处理):

  • &成为&
  • becomes >
  • <成为<
  • ‘成为’
  • ‘成为"

对于SQL注入,原理是相同的,通过使用mysql_real_escape_string、mysqli_real_escape_string、pg_escape_string、PHP Data Objects (PDO)或准备好的语句,避免在查询中使用特殊的SQL字符。

为了避免shell命令注入,您需要避免另一组字符。使用escapeshellcmd和escapeshellarg。

而对于其他媒介,则涉及到其他角色,并需要其他功能。正如有人在评论中所说,没有什么灵丹妙药。

票数 5
EN

Stack Overflow用户

发布于 2011-06-27 16:01:00

最好的概括是:滤波器输入逃逸输出(FIEO)。

PHP拥有执行这些功能所需的所有工具,但您需要充分理解它们各自的含义,识别正确的工具并正确地应用它。

把PHP想象成中间的人可能会有所帮助。

在一个方向上,PHP期望处理的任何东西,来自任何外部来源,都应该在可能的情况下根据期望“过滤”。

然后PHP向其传递数据的任何内容都必须进行转义,以便保护next环境免受任何类型的恶意攻击。转义以使其不会损坏数据库,或者转义以使其在回显到网页上时不会引起XSS攻击,这是两种最常见的情况。

票数 2
EN

Stack Overflow用户

发布于 2011-06-27 15:54:53

您正在讨论的各种注入(URL、SQL、表单、头文件等);只有当您不加注意地使用从这些来源检索的数据时,它们才会发生。

在SQL查询中直接使用_GET/_POST/etc变量时,会返回标头甚至脚本文件名/urls;代码会受到注入的影响。

然而,只要你不只是使用这些变量,并且总是正确地转义它们(例如,用于SQL查询的mysql_real_escape_string ),那么注入就不再那么容易了。

在某些地方使用正则表达式来验证输入也是可能的,但最薄弱的环节是您的正则表达式。您必须确保在脚本中可能出现的任何恶意输入上测试正则表达式。

主要的事情就是清理你的输入。永远不要使用用户可以直接更改的任何东西,永远不要。

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

https://stackoverflow.com/questions/6489958

复制
相关文章

相似问题

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