首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免用户输入注入的RegEx

避免用户输入注入的RegEx
EN

Stack Overflow用户
提问于 2010-12-31 16:46:11
回答 2查看 1.5K关注 0票数 0

收到用户的输入后,我将在我的服务器上执行以下操作(使用PHP):

代码语言:javascript
复制
$safe_input = ereg_replace("[^A-Za-z0-9-]", "", $_GET["input"]); 

然后,我使用$safe_input变量进行SQL查询,并将其打印到用户屏幕上。

这是否保证不会有任何类型的注入(SQL注入、XSS等)是可能的吗?

谢谢,

乔尔

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-31 16:52:01

它所做的是确保在$safe_input字符串中只允许A-Z (大写或小写)、数字和"-“破折号字符。

从理论上讲,您的SQL仍然可以被某些人添加"--“到输入,以强制语句的后半部分被视为SQL注释。

像你发布的这么简单的东西并不是恶意代码注入的解决方案-当你想要允许用户发送你明确允许的字符以外的字符时,很可能会导致你的问题。

你应该看看专门处理这类事情的第三方PHP库--有很多用于SQL和XSS预防的库。或者甚至在服务器级别上考虑添加一个可用于此任务的Apache模块(当然,前提是您使用的是Apache ...)。沿着这条路走下去,你将采取一种更全面的保护方法--你将利用这一领域的专业知识,而不是试图为你的项目重新发明这个特殊的轮子。

票数 2
EN

Stack Overflow用户

发布于 2010-12-31 16:49:50

首先,不推荐使用ereg系列函数,您应该改用preg系列函数:

不要将用户限制为只使用A-Za-z0-9-。我建议你去:

PHP是一个用

编写的符合标准的HTML filter库。超文本标记语言净化器将不仅删除所有的恶意代码(更为人所知的XSS)与一个彻底审计,

安全但允许的白名单,它还将确保您的文档是符合标准的,只有全面了解W3C的规范才能做到这一点。

您可以自定义接受和拒绝的内容。

Interesting:

有趣的是,Kohana是CodeIgniter的改进替代品,它还支持用于安全性的HTML Purifier。

对于SQL注入,至少可以使用mysql_real_escape_string函数。不过,更好的方法是使用prepared statements

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

https://stackoverflow.com/questions/4569060

复制
相关文章

相似问题

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