最近学学 PHP 以前是写 ASP 的,看到参数接受过来直接用于查询或者插入数据库没做任何判断,就像了这样不是会被注入吗,测试了下没成功,然后网上 查了下 都说构造 注入语句,靠
select * from table where name='$name'
说 给 $name 赋值 'or 1=1#
select * from table where name='' or 1=1#'
后面就不执行了,大部分都是这样说的
我运行下 ' 会被直接编译成 \'出现在语句里
select * from table where name='\' or 1=1'结果还是提示没找到此用户
这样的话 一般写 程序应该注意什么地方?貌似什么都不判断 已经很安全了。
怎样写才会出现 注入漏洞?

解决方案 »

  1.   

    select * from table where name='asfddsaf' or 1=1 or name='' 
      

  2.   

    php 有函数可以转换那些字符,但这样也不是很安全的做法,因为drop  delete  等是不会被转换的,分号会不会被转换楼主可以测试下,如果;没转,那危险性就挺大。
      

  3.   

    select * from table where name='$name' 
    在接收这个变量值的时候 如果输入 ' or 1=1  的话会被转义的 到时候 SQL 语句就成 
    select * from table where name='\' or 1=1'了 
      

  4.   

    如果 语句是 select * from table where name='$name' 这样写的 这个变量没过滤就会有漏洞吗, 我也在测试 闭合前面的 ' 然后后面写语句 但是 我写个 ' 的时候出来的语句自动会在 ' 前面加个\的 
      

  5.   

    = = 要屏蔽这种漏洞不难吧Mysql似乎也可以设置不允许一行SQL执行多个语句。。
      

  6.   

    就是因为php有自动转义,所以被鼓吹成非常安全~~~
      

  7.   

    使用例如Pear、Zend_DB框架中的帮定参数是最好的,基本上不需要考虑SQL注入。
    如下:
    SELECT * FROM bugs WHERE reported_by = ?
    SELECT * FROM example WHERE date > :placeholder
      

  8.   

    在sql语句里,尽量select * from aaa where abc = '$var',而不要 select * from aaa where abc = $var 即使是数字,也加上单引号reueest做成一个函数,过滤掉某些字符,如单引号(一般情况下,根本不允许有单引号),或sql里的注释语法
      

  9.   

    貌似 在 php 5 版本 设置 PHP.INC 的 自动转义 就不存在注入了
    可以这样说吗?
      

  10.   

    变量可以先转义处理下
    mysql_escape_string会将“'”转换成“\'” 或者使用存储过程。