3
回答
php中这种绕过表单验证的办法是如何实现的
终于搞明白,存储TCO原来是这样算的>>>   
下面这段代码,是表单验证的。
//判断是否提交了
if ($_GET['action'] == 'register') {
//为了防止恶意注册,跨站攻击
if (!($_POST['yzm'] == $_SESSION['code'])) {
_alert_back('验证码不正确!');
}
//引入验证文件
include ROOT_PATH.'includes/register.func.php';
//创建一个空数组,用来存放提交过来的合法数据
$_clean = array();
$_clean['username'] = _check_username($_POST['username'],2,20);
print_r($_clean);
}
但听说很多高手能绕过if (!($_POST['yzm'] == $_SESSION['code']))这句,不知怎么弄的
PHP
举报
ziluopao
发帖于2年前 3回/510阅
共有3个答案 最后回答: 2年前

    唉,本质上是基础知识,empty 和 isset 的区别,好好想想吧。。。曾经很多PHP代码的安全漏洞就出在这点基础知识不牢上。

    多么简单的逻辑,如果 $_POST['yzm'] 和 $_SESSION['code'] 都是空,那么 null==null就成立了,这不就绕过了么。至于怎么做,你可以想象。另外楼下说的session如果没及时更新被复用,也有可能是一个问题。

--- 共有 1 条评论 ---
雪梨苹果+1,if (!($_POST['yzm'] == $_SESSION['code'])) 这东西写了等于没写.... 2年前 回复

不能绕过,除非你能把服务器黑了,最多就是图像自动识别

高手在哪?拖出来请教请教

--- 共有 6 条评论 ---
齐德龙回复 @ziluopao : 这种后台细节看不到,只能靠经验和蒙,开源除外;除非硬是铁了心要黑,那得慢慢来研究摸索。 2年前 回复
ziluopao回复 @齐德龙 : 编程是细节,要是玩广泛,还有哪个程序能杠得住别人的攻击呢 2年前 回复
齐德龙回复 @eechen : 这么一说还确实是的,不Get触发验证码生成,直接post。PHP不太熟,还以为题主是从广泛角度谈如何绕过验证码。。 2年前 回复
齐德龙回复 @ziluopao : 这么一看还确实,:-D 2年前 回复
eechen回复 @ziluopao : PHP中比较字符串应该用恒等于===或者strcmp. 当用===或!==进行比较时则不进行类型转换,因为此时类型和数值都要比对. http://php.net/manual/zh/language.operators.comparison.php 2年前 回复

if ($_GET['action'] == 'register') 

绕开这个句就可以了,如果你里面判断用的是$_REQUEST,那轻松就绕开了。

顶部