这是否是一个好主意使用:
// input can only contain numbers letters
if (preg_match('/^[a-zA-Z0-9_\-\.]+$/', 'input')) {}这将有助于防止SQL注入?并使站点更加安全吗?
发布于 2020-12-18 10:26:22
我首先要说的是,您绝对应该在这里使用PHP准备语句。不要自己处理SQL注入,而且这个问题很久以前就已经解决了。
您的模式可能会阻止某些类型的SQL注入。例如,假设您有以下SQL查询:
SELECT col1, col2 FROM some_table WHERE col = ?;您的regex模式将阻止有人将'value'; DELETE FROM some_table注入查询。这是因为正则表达式模式不允许分号。
但是,还有其他类型的注入攻击,它们不涉及对附加(恶意)语句的链接。联合攻击也可能发生,您当前的正则表达式确实允许这样做。考虑注入以下片段:
'value' UNION ALL SELECT username, password FROM users这将提供以下完整的SQL查询:
SELECT col1, col2 FROM some_table WHERE col = 'value'
UNION ALL
SELECT username, password FROM users;虽然攻击者不太可能做到这一点,但这是可能发生的,如果发生了,攻击者可以从一个完全不同的用户表中获取每个用户名和密码。
使用准备好的语句,忘记自己处理这个问题。
https://stackoverflow.com/questions/65355194
复制相似问题