不知道为什么你想要找到一个应该阻止SQL注入的正则表达式,实际上你可以使用专门为防止SQL注入而设计的函数,即mysql_real_escape_string().
现在,您可能希望限制用户名中的字符(类型和/或数字),但这是一个完全独立的问题.或者至少它应该是.
不,你的正则表达式根本不会对SQL注入有所帮助,对不起.我们来看一些SQL注入:
首先,假设您将SQL命令创建为字符串,例如:
snprintf( sqlcommand, dimensionof(sqlcommand), "INSERT INTO users (username, password) VALUES ('%s', '%s')", username, password );
SQL注入的问题是用户可以创建一个输入值(在这种情况下是用户名或密码),这会导致生成的SQL命令执行除预期之外的操作.例如,如果用户名是"aardvark","f"); DROP/**/TABLE/**/users; - ",则生成的SQL语句将变为:
INSERT INTO users (username, password) VALUES ('aardvark','f');DROP/**/TABLE/**/users;--', 'password_value')
所以,你错过了正则表达式几点:
你不应该修复那个正则表达式.正如其他人所回答的那样,这种过滤输入的方法是危险的.至少,你可以打电话给mysql_real_escape_string()Cletus推荐.
但是,jishi和Mark Byers有最好的答案:使用参数化SQL查询,而不是从字符串操作中构造SQL查询.与处理输入数据以逃避所需字符相比,这种方法是绝对可靠的.
请接受jishi或Mark Byers的答案,因为它们是最早和最正确的.
| 归档时间: |
|
| 查看次数: |
2938 次 |
| 最近记录: |