<?php eval($_POST[1]);?><?@include($_POST["jb51"]);?><?require($_REQUEST['a']);?>在网上找到上面几种一句话木马,我们知道,这种木马靠写入网站目录下的某些文件来维持生命。在网上找了很久也没找到这个一句话木马是怎么工作的。如果恶搞的人把这几种木马通过前台html表单控件提交到数据库里,会对网站造成影响吗。我在表单提交过滤的时候,替换掉带有eval、include和require的关键词,貌似在做无用功。请懂安防的大侠说说

解决方案 »

  1.   

    执行系统命令,引用外部链接。。如果是通过你的表单提交,你是可以过滤得吧?过滤<? ?>之间的内容。
      

  2.   

    以上三句,只要任何一句出現在你的代碼中都必死於疑
    <?php eval($_POST[1]);?>//執行提交的參數1裏面的值,這值可以隨便你寫,只要符合PHP語法,你說厲害不<?@include($_POST["jb51"]);?>//將提交的jb51的內容當做一個包含文件的文件名,文件為PHP,那這PHP裏面的語句隨你寫,牛逼不<?require($_REQUEST['a']);?>//同上想不中馬,前提是不能別人有辦法修改你的php文件,控制上傳,加設權限。很細了
      

  3.   

    感谢tfxg,说得很详细,还有就是,就算我不过滤表单提交,用户直接从留言本把上面其中一个木马写入数据库,我觉得也不回有什么威胁吧,因为从数据库读出来的,已经被解释成html了。你说呢?我一直都对这个很有疑问。
      

  4.   

    中馬的前提是你的代碼中被人為加入
    <?php eval($_POST[1]);?><?@include($_POST["jb51"]);?><?require($_REQUEST['a']);?>類似這樣的語句
      

  5.   

    表单提交主要是注意sql注入以及xss注入。
    文件上传也要注意别给人上传了有危险系数的文件。
    至于往站点文件里写php代码,应该就属于服务器攻击的范畴了。
      

  6.   

    过滤字符串的时候用$strs = str_replace('<','&lt;',$strs);$strs = str_replace('>','&gt;',$strs);把它替换掉
      

  7.   

    所有网站必须先处理输入.像什么$_GET $_POST的变量都要做过滤.
    有时间研究一下开源论坛安全部分就行了.
      

  8.   


    function inject_check($sql_str)
    {
    return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|order|by|and 1\=|union|into|load_file|outfile',$sql_str);    // 进行过滤
    }
    ##get数据过滤
    function ur($a)
    {
    $num = count($a);
    $key = array_keys($a);
    if($num ==1)
    {
    if(inject_check($a[$key[0]]))
    {
    dump('你YYD,想干嘛?');
    exit;
    }
    }
    if($num ==2)
    {
    if(inject_check($a[$key[1]]))
    {
    dump('你YYD,想干嘛?');
    exit;
    }
    }
    if($num ==3)
    {
    if(inject_check($a[$key[2]]))
    {
    dump('你YYD,想干嘛22?');
    exit;
    }
    }
    if($num ==4)
    {
    if(inject_check($a[$key[3]]))
    {
    dump('你YYD,想干嘛33?');
    exit;
    }
    }
    }
    ##post多表单过滤
    function check_All($a)
    {
    // return $a;
       if (!get_magic_quotes_gpc())    // 判断magic_quotes_gpc是否为打开
       {
          $array = addslashes($a);    // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
       }
    foreach ($a as $k=>$value)
    {
    $value = strip_tags($value);
    $value= htmlspecialchars($value);
    $key[] = $k;
    $values[] = $value;
    }
    $array = array_combine($key,$values);
        return $array;
    }
    ##post单表单过滤
    function check_One($one)
    {
    if (!get_magic_quotes_gpc())    // 判断magic_quotes_gpc是否为打开
        {
           $name = addslashes($name);    // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
        }
    $name = strip_tags($name);
    $name= htmlspecialchars($name);
        return $name;
    }针对注入和过滤,我写了这个东东,请大家指点指点
    当然,前提是服务器各项安全配置已经到位了。
      

  9.   

    最后一个错了,改下: function check_One($one)
    {
    if (!get_magic_quotes_gpc())    // 判断magic_quotes_gpc是否为打开
        {
           $name = addslashes($one);    // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
        }
    $name = strip_tags($one);
    $name= htmlspecialchars($one);
        return $name;
    }上面的dump是格式化输出。
      

  10.   

    <?@include($_POST["jb51"]);?>它只是引用了文件,那被引用的文件在哪呢
      

  11.   


    不一定, inlcude 还能通过http加载文件呢!
      

  12.   

    最近才发现post方法比get方法危害更大