SQL 注入
用户名注入:select * from admin where name='' or 1=1 or '' and pwd = '';
select * from admin where name='' or 1=1 # '' and pwd = '';
select * from admin where name='' or 1=1 -- '' and pwd = '';
‘ or 1=1 or ‘’
‘ or 1=1 # ‘’
‘ or 1=1 – ‘’
密码注入:select * from admin where name='' and pwd = '' OR ''='';
‘ OR ‘’=’
解决方法一:mysql_real_escape_string()
函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:\x00
\n
\r
\
'
"
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
语法mysql_real_escape_string(string,connection)
| 参数 | 描述 |
| — | — |
| string | 必需。规定要转义的字符串。 |
| connection | 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
解决方法二:string mysql_escape_string ( string $unescaped_string )
mysql_escape_string()
并不转义%
和_
。 本函数和mysql_real_escape_string()
完全一样,除了mysql_real_escape_string()
接受的是一个连接句柄并根据当前字符集转移字符串之外。mysql_escape_string()
并不接受连接参数,也不管当前字符集设定。
解决方法三:string addslashes ( string $str )
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)。
解决方法四:
面向对象风格string mysqli::escape_string ( string $escapestr )
string mysqli::real_escape_string ( string $escapestr )
过程化风格string mysqli_real_escape_string ( mysqli $link , string $escapestr )