$sql = "SELECT CPUCode FROM RegData where CPUCode = '" .  str_replace("'", "''", $_GET["CPUCode"]) . "'";比如这句
以前是做.net的,习惯上把'替换成''就可以防大多数sql注入。但php里类似写法报错,反而是不做替换时能正常查询。这是php的一种防注入的机制吗? 为什么会自动加\呢..

解决方案 »

  1.   

    $sql = "SELECT CPUCode FROM RegData where CPUCode = '" . str_replace("'", "''", $_GET["CPUCode"]) . "'";因为你最外层的是双引号"",你把变量的单引号变成双引号当然出问题啦
      

  2.   

    建议使用PHP官方的过滤函数 http://cn2.php.net/manual/en/function.filter-input.php
      

  3.   

    把 “'” 替换成 “''” 这是 vbs 要求的转义处理
    如果你使用的数据库是 Sybase 系列的数据库(比如 mssql、access)也是需要这样做的
    对于遵循 ANSI/ISO SQL 标准的数据库,需转义成“\'”php 就防止 SQL 攻击方面所做的工作是:限制数据库函数一次只允许执行一条 SQL 指令
      

  4.   

    php  和.net 虽然有很多相似的,但 一些细节是我们不能忽视的。php 就防止 SQL 攻击方面所做的工作是:限制数据库函数一次只允许执行一条 SQL 指令
      

  5.   

    你这目前来说还与SQL无关啊,还未到那一步
    '出错是,php的字符串生成出错,引号嵌套有误
    在PHP中''之间变量是不解析的
    通常对参数addslashes 或其他加密入理
    对最终SQL语句进行关健字查询,特殊符号处理等例如 注释符等
    对于sql注入、入侵等,这都是一个攻防的问题