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






  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值