http://community.csdn.net/Expert/TopicView.asp?id=4244579参看我的发言

解决方案 »

  1.   

    http://blog.csdn.net/heiyeshuwu/archive/2005/06/14/394225.aspx
    http://blog.csdn.net/heiyeshuwu/archive/2005/07/20/429880.aspx
      

  2.   

    intval()、addslashes()是我常用的方法。
      

  3.   

    除了sql防范外,还有类似上传组件入侵的。只通过对扩展名验证好像不怎么好用。还要怎么验证呢?
      

  4.   

    防注入其实很简单。
    这里是PHP版,我给大家讲一下ASP中我是如何防注入的。
    比如一个用户表,登陆过要用到这个SQL语句
    select * from Users where username='' and password=''
    一般的程序员都不做任何处理,其实应该处理过。最简单的方法是这样的。
    我给大家讲一下Users的表结构
    Id
    username用户名,明文
    Auth_username用户名,密文
    password密码密码文
    其实大家将用户名也给他保存一个密文,比如值为md5(username)
    然后登陆的时候用这样一个SQL 语句
    select * from Users where Auth_username='md5(Request.Form("username"))' and password='md5(提交的密码)'
    这样在username字段,不管你有没有加什么注入字符,都给你转成MD5了,是神仙也注入不了了。
    而且这个功能仅仅是在表里加了一个字段,没什么浪费。
    这样有些人会说用MD5会不会造成两个不同的username的MD5密文却是一样的呢。有这种可能。不过概率实在太小。
    然后有人会说你这个查询的时候将注入封掉了,那插入数据怎么办。插入数据用这段代码好了。
    用ADO直接插入,不用SQL语句.
    set rs=server.createobject("adodb.recordset") rs.Open "users",conn,1,3
    rs.addnew
     
    rs("username")=username
    rs("Auth_username")=md5(username)
    rs("password")=md5(password)

    rs.update
    rs.close这只是简单的描述。用这种思路从来没有被注入过。之所以被注入,是因为我们没有花脑子去想。单凭过滤。有时候有些字符无辜的被过滤了。
      

  5.   

    liuwl(美丽克星)赞成呵呵
    select pwd from user where name='".$name."'
    然后判断获取的纪录中的 pwd字段再做判断呵呵
      

  6.   

    看来SQL注入的防范,大家都有心得,有谁有通过饶过别人的后台,通过其上传功能上传木码程序的。