首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regex验证用户输入以防止sql注入

使用regex验证用户输入以防止sql注入
EN

Stack Overflow用户
提问于 2020-12-18 10:16:59
回答 1查看 1.2K关注 0票数 1

这是否是一个好主意使用:

代码语言:javascript
复制
// input can only contain numbers letters
if (preg_match('/^[a-zA-Z0-9_\-\.]+$/', 'input')) {}

这将有助于防止SQL注入?并使站点更加安全吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-18 10:26:22

我首先要说的是,您绝对应该在这里使用PHP准备语句。不要自己处理SQL注入,而且这个问题很久以前就已经解决了。

您的模式可能会阻止某些类型的SQL注入。例如,假设您有以下SQL查询:

代码语言:javascript
复制
SELECT col1, col2 FROM some_table WHERE col = ?;

您的regex模式将阻止有人将'value'; DELETE FROM some_table注入查询。这是因为正则表达式模式不允许分号。

但是,还有其他类型的注入攻击,它们不涉及对附加(恶意)语句的链接。联合攻击也可能发生,您当前的正则表达式确实允许这样做。考虑注入以下片段:

代码语言:javascript
复制
'value' UNION ALL SELECT username, password FROM users

这将提供以下完整的SQL查询:

代码语言:javascript
复制
SELECT col1, col2 FROM some_table WHERE col = 'value'
UNION ALL
SELECT username, password FROM users;

虽然攻击者不太可能做到这一点,但这是可能发生的,如果发生了,攻击者可以从一个完全不同的用户表中获取每个用户名和密码。

使用准备好的语句,忘记自己处理这个问题。

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

https://stackoverflow.com/questions/65355194

复制
相关文章

相似问题

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