1。用session不会被伪造,session在服务器端,而cookie在客户端。
2。应判断传来的ID是否数值
3。去HTML代码就可以了
4。如1,很多网站这么用。
5。不必太担心注入式,mysql应该是不错的选择,加了过滤就更好。

解决方案 »

  1.   

    关于第二个问题,我和楼上那位仁兄有不同的见解。不过前提是,forumID必须是数值。不防做个实验:
    <?php
    //如果var是整数,则输入它的值,否则输入“var is not int”
    if (is_int($_GET['var'])) {
        echo $_GET['var'];
    } else {
        echo 'var is not int';
    }
    ?>
    然后访问http//domain/test.php?var=99
    显示:var is not int
    不知道这个问题能不能说明,GET过来值都被当作字符串处理了?那么我们运作类型戏法,加上一行:
    <?php
    //把变量var的类型强制转换为整数
    $_GET['var'] = (int) $_GET['var'];//如果var是整数,则输入它的值,否则输入“var is not int”
    if (is_int($_GET['var'])) {
        echo $_GET['var'];
    } else {
        echo 'var is not int';
    }
    ?>
    然后访问http//domain/test.php?var=99
    输出:99访问http//domain/test.php?var=abc
    输出:0访问http//domain/test.php?var=' and 1=1
    输出:0那么,这们可否认为,对于处理GET过来的整数值,运用类型戏法,可以产生较为安全的可用数据?
      

  2.   

    关于lm92讨论的is_int问题可以用is_numeric()来替代
    如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。 但这的不是我讨论的中心啊!我要解决的是如何读取,如何处理之后在放如mysql_query语句中
      

  3.   

    这就要看你设计的需要而定了,最基本的是防普通的SQL Injection,过滤一些关键字,这个不用说吧?写个函数就能完成。
    function quotes($content = NULL)
    {
        if (!get_magic_quotes_gpc() && !empty($content)) {
            if (is_array($content)) {
                foreach ($content as $key => $value) {
                    $content[$key] = addslashes($value);
                }
            } else {
                $content = addslashes($content);
            }
        } else {}
        return $content;
    }还有就是根据需要对输入的数据进行检查,比如说纯数字的、小写字母的等等。比如说,我以前的小站功能和页面都不多,所以就写了一段代码来检查URL伟递过来的变量的敏感字,还做了这个敏感字列表,算比较严格的了,应该不太适合大项目使用。
    array('\'', '"', '`', '#', '%', ';', '(', ')', 'select', 'update', 'delete', 'insert', 'union', 'from', 'where', 'like', 'char', 'ord', 'conv', 'ascii', 'left')
      

  4.   

    PHP上有一些专用的函数,如htmlspecialchars 等
    用这些函数这么处理呢?
      

  5.   

    至少要过滤非法字符吧/* 函数 f_TransStr($str)
    ** 功能 对字符串进行转换,回车变<br>,空格变&nbsp;,并过滤非法字符
    ** 参数 $str 要转换的字符串
    */
    function f_TransStr($str){
    $str = str_replace("&", "&amp;", $str);
    $str = str_replace("|", "&#124;", $str);
    $str = str_replace("<", "&lt;", $str);
    $str = str_replace(">", "&gt;", $str);
    $str = str_replace("'", "&#39;", $str);
    $str = str_replace("\"", "&quot;", $str);
    $str = str_replace(" ", "&nbsp;", $str);
    $str = nl2br($str);
    return $str;
    }
      

  6.   

    1、不会。
    2、没发现有安全隐患。
    3、防止注入用对post参数遍历slashes即可。
    4、不安全,但是都这样用。
    5、没听说过。
      

  7.   

    谁说session不能做假?晕!以前曾经自己试过去黑论坛,发现有很安全问题可以利用,我想不用认坛就是最安全的论坛!呵呵,不过如果专人管理,随时注意,出问题也不会很大
      

  8.   

    session能够伪造,不过比较复杂。
    另外,论坛其实更多的关心你的架构、可扩展性、插件技术、模板技术等等。安全只是其中一块,你把基本的安全做好了,问题不大。关于安全可以参考一下Discuz,代码写的比较安全。