http://localhost/photo.php?type=1&id=0最近看一下黑客教程 说什么 在 这些URL 后面 加入 一些 1=1 这些条件可以实现什么SQL 注入问题
现在 我想以上的photo.php 文件被访问的时候, 程序检查是否合符规格,‘type=’ 和‘id=’ 后面只能跟数字。在id后面不能有其他的参数,比如: 
http://localhost/photo.php?type=1&id=0&1=1 
这样
请各位指点一下 谢谢

解决方案 »

  1.   

    你的程序只关注$_GET['type'],$_GET['id'],你理会1干什么如果你认为type和id都是整数,就应该接受后立即:$type = intval($_GET['type']);
    $id = intval($_GET['id']);再对type和id做操作,即便type或者id做了恶心的type=1%3d2&id=0%3b之类的,也就没有安全性问题了。
      

  2.   

    使用intval 或者正则对提交的内容根据最终目的类型进行过滤。判断提交内容的长度...
    当然前提是涉及到数据库的操作时.如果你这个参数都没有参与数据库的相关操作那么可以不需要这么紧张啦.
      

  3.   


    if(!(preg_match("/^\d*$/",$_GET[type])) || $_GET[type] < 0 || $_GET[type] == null)  { 
    header('Location: ./XXXX');
    exit();
    }

    if(!(preg_match("/^\d*$/",$_GET[page])) || $_GET[id] < 0 || $_GET[id] == null)  { 
    header('Location: ./xxxx');
    exit();
    }我现在这样咯
      

  4.   

    哪用得着正则啊。is_numeric()就能判断是否为数字。
      

  5.   

    若是整型的直接强制转换(int)$var;这样不是更省事!至于字符窜类型的,得用过滤之类的手段了
      

  6.   

    对输入数据做检查和过滤,基本是程序第一步要做的事情...其实楼主你一定已经做过很多了...
    不要被那些黑客教程吓着,没有被程序使用的输入,不会对安全有任何危害至于用intval, (int) 还是is_numeric 或是正则,完全取决于你的需求,注意这些方法在特殊输入时有可能产生不同效果,
    比如在输入小数时?负数时?十六进制,八进制数时?以数字开头却包含字母时?
    结果是有可能不同,然后可能导致程序走向不同的分支.最好的方法就是多测试.