php安全-防止sql注入攻击简单方法

方法一:密码比对

思路:首先通过用户输入的用户名去查询数据库,得到该用户名在数据库中对应的密码,再将从数据库中查询到的密码和用户提交过来的密码进行比对。

代码: 

 代码如下 复制代码

       $sql="select password from users where username='$name'";

       $res=mysql_query($sql,$conn);

       if ($arr=mysql_fetch_assoc($res)){//如果用户名存在

              if ($arr['password']==$pwd) {//密码比对

                     echo "登录成功";

       }else{

              echo "密码输入有误";

       }

       }else {

              echo "该用户名不存在";

       }

分析:该情况下,代码健壮了不少,即使在magic_quote_gpc=Off的情况下,也能防止SQL注入攻击。因为攻击者想成功登录的话,得绕过两道坎,第一是输入的用户名要存在,这一步可以构造一个SQL语句(‘ or 1=1%23)直接绕过,但是这样子无法通过第二道坎。因为需要用户输入一个正确的密码才能通过,显然,这已经拒绝了SQL注入攻击。

 

方法二:使用PDO的PDO::prepare()预处理操作来防止SQL注入攻击

思路:创建一个pdo对象,利用pdo的预处理操作可以防止SQL注入攻击

代码:

 代码如下 复制代码

 

       $name=$_GET['username'];

       $pwd=$_GET['password'];   

       $sql="select * from users where username=? and password=?";

       //1.创建一个pdo对象

       $pdo=new PDO("mysql:host=localhost;port=3306;dbname=injection","root","");

       //2.设置编码

       $pdo->exec("set names 'utf8'");

       //3.预处理$sql语句

       $pdoStatement=$pdo->prepare($sql);

       //4.把接收到的用户名和密码填入

       $pdoStatement->execute(array($name,$pwd));

       //5.取出结果

       $res=$pdoStatement->fetch();

       if(empty($res)){

              echo "用户名或密码输入有误";

       }else{

              echo "登录成功";        

       }

时间: 2024-07-28 15:15:00

php安全-防止sql注入攻击简单方法的相关文章

PHP漏洞之SQL注入攻击简单介绍

  SQL注入攻击的一般步骤: 1.攻 击者访问有SQL注入漏洞的站点,寻找注入点 2.攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句 3.新的sql语句被提交到数据库中执行 处理 4.数据库执行了新的SQL语句,引发SQL注入攻击   实例 数据库 CREATE TABLE `postmessage` ( `id` int(11) NOT NULL auto_increment, `subject` varchar(60) NOT NULL default ", `na

Nginx防止SQL注入攻击配置方法

防御原理: 1. 通过以上配置过滤基本的url中的注入关键字: 2. 当然,数据库中的用户密码得加密存放 : 3. php程序进行二次过滤,过滤GET和POST变量中的关键字: 4. 生产环境关闭PHP和MySQL的错误信息. SQL注入攻击一般问号后面的请求参数,在nginx用$query_string表示 例如,对于参数中带有单引号的'进行匹配然后定向到错误页面, /plus/list.php?tid=19&mid=1124'  代码如下 复制代码 rewrite ^.*([;'<>

防止sql注入的简单方法

检查输入内容,如果包含敏感字符则删除敏感字符敏感字符包括: '><=!-+*/()|和空格然后再拼凑SQL语句如果先拼凑,再过滤,工作量就大了,而且副作用太多

浅谈开启magic_quote_gpc后的sql注入攻击与防范_Mysql

通过启用php.ini配置文件中的相关选项,就可以将大部分想利用SQL注入漏洞的骇客拒绝于门外. 开启magic_quote_gpc=on之后,能实现addslshes()和stripslashes()这两个函数的功能.在PHP4.0及以上的版本中,该选项默认情况下是开启的,所以在PHP4.0及以上的版本中,就算PHP程序中的参数没有进行过滤,PHP系统也会对每一个通过GET.POST.COOKIE方式传递的变量自动转换,换句话说,输入的注入攻击代码将会全部被转换,将给攻击者带来非常大的困难.

常用的SQL注入攻击方法总结

1. 没有正确过滤转义字符 在用户的输入没有转义字符过滤时,就会发生这种形式的注入或攻击,它会被传递给一个SQL语句.这样就会导致应用程序的终端用户对数据库上的语句实施操作.比方说,下面的这行代码就会演示这种漏洞:  代码如下 复制代码 "SELECT * FROM users WHERE name = ' " + userName + " ' ;" 这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用户用一种特定的方式伪造,这个语句

Nginx防范Sql注入攻击方法总结

基本sql注入原理: 通过union all 联合查询获取其他表的内容(如user表的用户密码) 防御原理: 1. 通过以上配置过滤基本的url中的注入关键字: 2. 当然,数据库中的用户密码得加密存放 : 3. php程序进行二次过滤,过滤GET和POST变量中的关键字: 4. 生产环境关闭PHP和MySQL的错误信息. 对于简单的情况,比如包含单引号' , 分号;, <, >, 等字符可通过rewrite直接重订向到404页面来避免.   用rewrite有个前提需要知道,一般用rewri

SQL注入攻击-来自微软安全博客的建议

本文翻译自微软博客上刊载的相关文章,英文原文版权归原作者所有,特此声明.原文:http://blogs.technet.com/swi/archive/2008/05/29/sql-injection-attack.aspx近期趋势 从去年下半年开始,很多网站被损害,他们在用于生成动态网页的SQL数据库中存储的文本中被注入了恶意的HTML <script>标签.这样的攻击在2008年第一季度开始加速传播,并且持续影响有漏洞的Web程序.这些Web应用程序有这样一些共同点: 使用经典ASP代码的

Spring MVC防御CSRF、XSS和SQL注入攻击

解决CSRF的办法:客户端向服务器提交请求时,服务器一定要校验口令.客户端指定页面要有服务器端提供的口令 本文说一下SpringMVC如何防御CSRF(Cross-site request forgery跨站请求伪造)和XSS(Cross site script跨站脚本攻击). 说说CSRF 对CSRF来说,其实Spring3.1.ASP.NET MVC3.Rails.Django等都已经支持自动在涉及POST的地方添加Token(包括FORM表单和AJAX POST等),似乎是一个tag的事情

预防SQL注入攻击之我见

SQL注入攻击的本质:让客户端传递过去的字符串变成SQL语句,而且能够被执行. 每个程序员都必须肩负起防止SQL注入攻击的责任. 说起防止SQL注入攻击,感觉很郁闷,这么多年了大家一直在讨论,也一直在争论,可是到了现在似乎还是没有定论.当不知道注入原理的时候会觉得很神奇,怎么就被注入了呢?会觉得很难预防.但是当知道了注入原理之后预防不就是很简单的事情了吗? 第一次听说SQL注入攻击的时候还是在2004年(好像得知的比较晚),那是还是在写asp呢.在一次写代码的时候,有同事问我,你的这段代码防注入