在mysql表名(user_login)中,我有login_name和password这样的字段。我输入的密码是abc,密码是/‘(像\/’这样的特殊符号) .And我的查询是
select password from user_login where password like '/'‘和I got SQL语法错误
发布于 2010-02-02 17:32:43
无论使用哪种语言实现调用,都应该使用参数化查询。当心SQL Injection attack
发布于 2010-02-02 17:33:14
您应该使用参数,而不是直接将变量放入查询中。我想是转义符号有问题。
发布于 2012-09-06 11:53:08
如果您曾经在登录系统中使用LIKE,那么您已经将所有的安全性抛在了窗外。在您的登录上尝试以下命令,以了解我的意思:
用户名:%
密码:%
为数据库中的第一个用户授予访问权限。(祈祷不是管理员用户)
如果用户名已知,则%作为密码将提供完全访问权限。
如果你想要一个不区分大小写的更友好的系统(是的,这减少了可能的密码数量-但可能适合用户名),那么强制大小写(或大写或ucword或任何你喜欢的)-但不要在任何涉及登录或未筛选用户输入(如搜索框)的查询中使用LIKE运算符。任何时候你必须使用LIKE操作符,确保去掉或手动转义% and _(,如果你使用的是MS SQL,那么也转义所有的REGEX操作符- []^$()*。)。
mysql的许多转义函数不会转义%_字符,当与LIKE一起使用时,它允许任何访问者执行通配符搜索(可能会严重影响服务器并导致DoS问题),更糟糕的是,使用%:%登录时会授予自己不应有的特权。
https://stackoverflow.com/questions/2182958
复制相似问题