对$_GET进行过滤,防止自动全局变量
对用户提交的数据进行严格验证
对输出尽量使用htmlspecialchars转意
关于SQL注入问题,比如搜索部分,尽量屏蔽特殊字符:
."'\/*_等,并使用单引号引出关键字。
对于用户验证,使用服务器端Session保存信息会更安全一些
等等……

解决方案 »

  1.   

    最常用的是
    1 能用POST的地方不要用GET
    2 能用SESSION的地方不要用COOKIE
    3 所有进入sql语句的变量都要经过检测,可专门写一个检测函数--(这个看深空的文字)
    4 后台登陆窗口不要起大家都猜的到的名字---如index.htm,login.htm
    5 注意代码的安全性,意思是,你验证的时候,不要在代码里出现逻辑漏洞,让人可以绕过你的
    验证---这个在PHPE里面有一篇文章,找来看一下吧.大概就这么多吧..
      

  2.   

    楼主看看下面代码:
    <?php//$username,$password是传入的变量
    if($username == 'right' && $password == 'pass'){
         $login = 'yes'
    }
    .....
    if($login == 'yes'){
       //only member can see codes here
    }
    else{
      //normal codes here
    }
    ?>
    这段代码是我在一个实实在在的程序中copy下来的.
    这段代码咋一看也没什么问题,可是楼主想想,如果用户直接在地址栏里输入xxx.php?right=yes会是什么样子?
    因此防止漏洞的产生的最关键一点就是,写代码的时候不能想当然,要多考虑一些其他情况;-)
      

  3.   

    sorry,一个语法错误;-),丢掉了;
      

  4.   

    screend(流浪小子),哈哈说的就是怎么预防漏洞,你就来了个漏洞!
    正确的书写格式和严谨的写法也很重要哦!
      

  5.   

    。。
    这个是语法错误啊
    不是漏洞啊对sql的]过滤还是尽量在底层封装的好,免得哪里忘记了
      

  6.   

    补充几条
    所有变量使用前记得初始化。
    关闭register_globals
    用eval处理传递过来的数据的时候,要小心小心再小心
      

  7.   

    countstars(深空)讲的还是比较全一点.
    还有就是安全和效率(开发效率,运行效率)要平衡,
      

  8.   

    如果服务器已经关闭了全局变量的话,$username是无法直接传递的
      

  9.   

    对$_GET进行过滤,防止自动全局变量
    对用户提交的数据进行严格验证
    对输出尽量使用htmlspecialchars转意
    关于SQL注入问题,比如搜索部分,尽量屏蔽特殊字符:
    ."'\/*_等,并使用单引号引出关键字。
    对于用户验证,使用服务器端Session保存信息会更安全一些
    等等……
    说得很好了.自己再去程序中体会吧......多找资料.多看文章.
      

  10.   

    还有一个最大的漏洞就是不能允许上传php文件,或者上传文件的扩展名一定要检查并改名。
      

  11.   

    1、特殊字符转义。
    2、sql语句输入之前进行转义。
    3、在权限判断的时候记得先注销权限变量。
    4、权限判断到位,不要有真空区域。
    5、不允许上传php相关文件,或者进行改名。
    6、phpmyadmin记得不要用自动登陆那种。
    7、尽可能的所有密码都进行md5加密存储。
    8、客户端保存的是用户名密码的内容,而不是是否通过登陆的内容。我觉得至于后台管理界面的文件名,没有什么必要改。因为很多时候在页面链接上都会加入,方便直接进入操作。只是密码要记得用加密后的保存,不要明文。
    如楼上所说,sql最好还是进行封装。这样对于所有的语句都会安全一点。或者干脆用那些通用类好过。
    权限判断,我觉得写成类可能也会比较好吧。大家觉得呢?
      

  12.   

    我说2句吧
    1:尽量用 select count(*) from table where pass='$pass' and  name='$name'
    而不用select count(*) from table where name=$name and pass=$pass
    2:能用$_POST 不用$_GET,用GET的时候  $id=intval($_GET['id'])3:一些危险性的函数尽量避免使用
      

  13.   

    我做图片上传的时候一律把扩展名改成pic,反正不影响显示。