存档

文章标签 ‘cookie’

php使用cookie防止重复提交是不安全的

2010年3月20日 没有评论

最近在做一php项目时遇到需要检查重复提交的情况,搜索了一下发现一种做法是使用cookie来防止,起初一看还觉得可行,但细想以下发现在某些情况下是无法达到目标的。
  cookie这个东西是属于客户端的,在设置了cookie后每次访问浏览器都会将设置的cookie发送给服务器。用cookie来防止重复提交的做法是在访问需要提交信息的页面时设置一个cookie值,在接收的页面验证这个cookie值是否满足规则。
如下面的测试代码:
test0.php

< ?php
sleep(2);//模拟有延迟比较大的情况
if($_COOKIE['onlypost'] == 't'){
	setcookie("onlypost", 'f'); 
	if (isset ( $_POST ['msg'] )) {
		mysql_connect ( 'localhost', 'root', 'root' );
		mysql_select_db ( 'test' );
		mysql_query ( "insert into t_msg(msg) values('" . $_POST ['msg'] . "')" );
	}
    echo 'submit ok';
}else{
	echo 'submit error!';
}
?>

test1.php

< ?php 
setcookie("onlypost", 't'); 
?>
<form action="test0.php" method="post">
msg:<input type="text" name="msg"/><input type="submit"/>
</form>

测试数据表

CREATE TABLE `t_msg` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `msg` VARCHAR(50) ,
  PRIMARY KEY (`id`)
)

在访问test1.php时,如果用户的延迟比较大,填写信息后连续两次或多次点击提交按钮。因为在第一次提交后服务器还没有返回信息重设cookie,浏览器接下来发送的请求数据包中cookie的值始终是一样。
阅读全文…

分类: 高级民工 标签: ,