灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2841回复:0

php 如何做数据库攻击(如:SQL注入)

楼主#
更多 发布于:2014-03-10 10:16
PHP mysql_real_escape_string() 函数
 
PHP MySQL 函数
定义和用法
 
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
x00
n
r
'
"
x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
语法
 
mysql_real_escape_string(string,connection)
参数 描述
string 必需。规定要转义的字符串。
connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。
说明
 
本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于mysql_query() 。
提示和注释
 
提示:可使用本函数来预防数据库攻击。
例子
 
例子 1
 
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con)
{ die('Could not connect: ' . mysql_error());
} // 获得用户名和密码的代码 // 转义用户名和密码,以便在 SQL 中使用 $user =mysql_real_escape_string($user); $pwd =mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'" // 更多代码 mysql_close($con); ?>
例子 2
 
数据库攻击。本例演示如果我们不对用户名和密码应用 mysql_real_escape_string() 函数会发生什么:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con)
{ die('Could not connect: ' . mysql_error());
} $sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'";
mysql_query($sql); // 不检查用户名和密码 // 可以是用户输入的任何内容,比如: $_POST['user'] = 'john'; $_POST['pwd'] = "' OR ''='"; // 一些代码... mysql_close($con); ?>
那么 SQL 查询会成为这样:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
这意味着任何用户无需输入合法的密码即可登陆。
例子 3
 
预防数据库攻击的正确做法:
<?php function check_input($value) { // 去除斜杠 if (get_magic_quotes_gpc())
{ $value =stripslashes($value);
} // 如果不是数字则加引号 if (!is_numeric($value))
{ $value = "'" .mysql_real_escape_string($value). "'";
} return $value;
} $con = mysql_connect("localhost", "hello", "321"); if (!$con)
{ die('Could not connect: ' . mysql_error());
} // 进行安全的 SQL $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE
user=$user AND password=$pwd";
 
mysql_query($sql);
 
mysql_close($con); ?>
?

喜欢0 评分0
游客

返回顶部