防止sql语句编写注入攻击

通常简单的有直接在登陆处写用户名为 ‘ 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语句攻击,原理就是通过对一些字符转义,另外一个函数用法相似。网站安全防范,仍然有待提高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值