通常简单的有直接在登陆处写用户名为 ‘ or 1=1 #来登陆,密码随便填写,如果没有防范,就直接登陆了,防止方法,两个函数,
一、addslashes(string)string 必须,规定要转义的字符串
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
单引号(’)
双引号(”)
反斜杠(\)
NULL
该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
注释:默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。
二、mysql_real_escape_string(string,connection) string 必需。规定要转义的字符串,connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。函数转义 SQL 语句中使用的字符串中的特殊字符 。
下列字符受影响:
\x00
\n
\r
\
’
”
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
举例1
try3.php
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf8">
<title>-_-</title>
</head>
<body>
<form action="try4.php" method="post" enctype="multipart/form-data">
用户名: <input type="text" name="name"><br><br>
密码: <input type="password" name="pwd">
<input type="submit" value="提交">
</form>
</body>
</html>
try4.php
<?php
$link=mysql_connect("localhost","root","pxy") or die(mysql_error());
mysql_select_db("test") or die(mysql_error());
mysql_query("charset=utf8");
var_dump($_POST);
$arr=$_POST;
$sql="select * from users where name='{$arr['name']}'' and pwd='{$arr['pwd']}'";
echo $sql;
$res=mysql_query($sql) or die(mysql_error());
if($res)
{
echo "登陆成功";
}
else
{
echo "登陆失败";
}
用户名 输入 ‘ or 1=1 #,密码输入12;结果,登陆成功,
输出sql语句和结果:select * from users where name=” or 1=1 #” and pwd=’12’登陆成功
将$arr[‘name’]=addslashes($arr[‘name’]);
sql语句:select * from users where name=’\’ or 1=1 #” and pwd=’12’;
结果,登陆失败,
由此,可知,addslashes()函数可以防止一定的sql语句攻击,原理就是通过对一些字符转义,另外一个函数用法相似。网站安全防范,仍然有待提高。