if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && $GLOBALS['formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||
preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {

解决方案 »

  1.   

    存在 $allowget , 是用 post 方法传送来的, .., .., 来源url 是空 或者 来源 url 和 url 的 HOST 信息  要 满足那二个 正则 ..
      

  2.   

    if(
    $allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && $GLOBALS['formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST']))))
    三个条件
    操作符优先级问题:||最低级然后是从前往后计算,只要有一个为真即执行
      

  3.   

    语法就不说了,就大概解释下代码的含义吧这段代码的作用是检验客户端提交过来的表单的数据合法性和安全性。1 $allowget可能是DZ在其公共文件中定义的一个变量,看名字似乎是是否运行以GET方式提交表单。2 $_SERVER['REQUEST_METHOD'] == 'POST'这句是判断你提交方法是否为POST,$GLOBALS['formhash'] == formhash();formhash是你在访问他表单时,表单生成的的一个值,这里做判断是为了防止你自己构造表单来提交。这两个连起来就是判断如果你提交方法用的是POST,那你必须用我网站上提供的表单进行提交,不能让你自己构造表单。formhash起一个验证的作用。3 $_SERVER['HTTP_X_FLASH_VERSION']和$_SERVER['HTTP_REFERER']两个属性都为空的话,也是在检验表单是不是你自己私自构造的,具体两个参数的含义请自己google下。4 preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER'])==preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))的含义是如果取出$_SERVER['HTTP_REFERER']中的域名(比如www.g.cn)与$_SERVER['HTTP_HOST']中取出的域名想等的话。
    这是在判断访问这个页面之前的页面的域名是否与当前页面的域名想等,或者说他们是否属于同域。其实还是在判断你是不是自己从本地构造的表单而非DZ提供的表单。以上4个条件满足一个,就执行下面的代码。
      

  4.   

    是DZ里submitcheck函数里的内容,判断是否是合法的提交