网站防止远程POST提交的方法思路。discuz的submitcheck函数评析

discuz自带的一个判断是否是远程提交,其实这个函数这样毫无意义。

discuz的自带的判断是否是远程提交的函数submitcheck:地址 D:\website\***.com\www\source\class\helper\helper_form.php

public static function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {if(!getgpc($var)) {return FALSE;} else {global $_G;if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_GET['formhash']) && $_GET['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'])))) {if(checkperm('seccode')) {if($secqaacheck && !check_secqaa($_GET['secanswer'], $_GET['sechash'])) {showmessage('submit_secqaa_invalid');}if($seccodecheck && !check_seccode($_GET['seccodeverify'], $_GET['sechash'])) {showmessage('submit_seccode_invalid');}}return TRUE;} else {showmessage('submit_invalid');}}}

标准就是REQUEST_METHOD和HTTP_REFERER还有formhash(),其实这个里面最唯一有用途的就是formhash()。如果是软件提交,HTTP_REFERER是可以自己修改定义的。

防止远程提交的思路:

(1)如果是你使用的程序是discuz的,可以打开discuz,将里面的formhash这个input的名字替换成其他的!比如直接替换成formhash()的值。同时修改这个检测函数submitcheck(),把formhash改成你改的那个字符串。

(2)如果不想修改discuz源码,但知道如何修改js的话,可以直接使用jquery post请求formhash() JS动态生成formhash这个<input type="hidden" name="formhash" />

其实如果discuz的官网程序默认的formhash这个是js动态创建,那么就完全可以过滤到95%远程提交。除非你的网站是类似58同城、赶集网这样的,软件提交者每时每刻都在关注修改调整他的程序。

(3)注册限制,未登录的用户不允许进行发帖任何操作。如果你使用的不是开源的流行的程序,除非你的网站特别牛,否则没有人会话心思来做一个专门针对你的网站的批量发帖软件!那些自动提交的软件都是定做的,不存在万能的提交。

每年的情人节圣诞节除夕,也和他共度。甚至连吵架也是重复的,

网站防止远程POST提交的方法思路。discuz的submitcheck函数评析

相关文章:

你感兴趣的文章:

标签云: