网上搜到一篇 PHP 防SQL注入的文章
原文地址E文不算很好,理解不够全面,求前辈们解释一下。下面是我学习PDO后自己写的代码。php.iniextension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
;extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll求教:PHP PDO 模块,真的可以防SQL注入?用了那个$db->prepare,真的连addslashes都不需要了?
另外, PDO设置连接超时,也是 set_time_limit(秒数)?谢谢。$dbms='mysql';
$host='localhost';
$dbName='test';
$user='root';
$pass='root';
$dsn="$dbms:host=$host;dbname=$dbName";
$db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';"));
$preparedStatement = $db->prepare('INSERT INTO mytable (title,content,date) VALUES (:title,:content,:date)');
$preparedStatement->execute(array(':title' => '$_POST['title']',':content' => '$_POST['content']',':date' => '$_POST['date']'));

解决方案 »

  1.   

    没人知道吗?CSDN前辈不少啊~
      

  2.   

    prepare应该不会帮你过滤的吧?
    n久不用pdo了,记不太清了,我记得当时都是用pdo的quote过滤。
      

  3.   

    Yes.
    最好的测试方法是打开mysql的query log,模拟一些数据尝试注入(gpc quote打开和关闭都要尝试),然后去log文件看最终语句生成
      

  4.   

    恩,晚些时候自己测试看看。
    pdo的中文教程不多,网上有的都是抄来抄去的那2篇。
    打算再搜搜E文的介绍。
      

  5.   

    大虾们,凭你们的经验,pdo可以多大程度上抵挡住SQL注入?
      

  6.   

    UP ++大虾们,凭你们的经验,pdo可以多大程度 抵挡 SQL注入?
      

  7.   

    addslashes 的作用是转义特殊字符
    由于 SQL 指令中,串的分界符是单引号,所以需要对串中的单引号做转义处理PDO 是封装好的数据库操作类,自然也就封装了自己的转义方法 quote,而无需借助第三方注意这只是转义,而不是过滤所谓 SQL 注入,是源于 mssql 提供的 HTTP 协议的查询功能的。
    用户可以通过 url 参数访问 mssql 数据库,mssql 以列表方式给出结果;
    由于 mssql 的存储过程具有仅次于管理员的权限,并具有访问操作系统的能力。
    所以一旦被利用,就可能导致灾难性后果php 对于 SQL 注入采取了以下防范措施
    1、magic_quotes_gpc 自动转义,php5.3 起已不可关闭
    2、除声明存储过程的 SQL 指令外,所用 SQL 指令都不允许出现语句结束符“;”(当然串中的是例外),即
    每次只能执行一条指令。杜绝了通过重构 SQL 指令串造成攻击的可能性
    3、不可能通过 php 提供的数据库操作函数在一句代码中完成查询与输出动作,给伪造查询条件获取私密资料带来困难。PDO 反而是可以的
      

  8.   

    PDO的变量绑定bindParam和bindValue会自动添加转义。但无法对表或字段的名字进行变量绑定。因此当表名或字段名不确定(即可能从用户输入中获取),而需要动态组装SQL语句时,即使是用了PDO变量绑定来提供字段的值,应当注意表名和字段名部分的过滤。
      

  9.   

    明白了,PDO,只是一个手段,并非最合适的方法。