如何在php中进行跨站点请求伪造攻击

Posted

技术标签:

【中文标题】如何在php中进行跨站点请求伪造攻击【英文标题】:how to cross site request forgery attack in php 【发布时间】:2018-09-09 15:55:21 【问题描述】:

我在 ***.com 上阅读了很多关于如何防止任何 CSRF 攻击的帖子。我在这里找到的解决方案似乎不是我想要的方式。 以下是来自以下链接的 ***.com 答案,适用于尝试删除记录同时确保不可能进行 CSRF 攻击的人。

preventing csrf in php

confirm.php

<?php
 session_start();
 $token= md5(uniqid());
 $_SESSION['delete_customer_token']= $token;
 session_write_close();
?>
<html>
<body>
<form method="post" action="confirm_save.php">
 <input type="hidden" name="token" value="<?php echo $token; ?>" />
Do you really want to delete?
<input type="submit" value=" Yes " />
<input type="button" value=" No " onclick="history.go(-1);" />
</form>
</body>
</html>

那么当谈到实际删除记录时:

confirm_save.php

<?php
 session_start();
 $token = $_SESSION['delete_customer_token'];
 unset($_SESSION['delete_customer_token']);
 session_write_close();
 if ($token && $_POST['token']==$token) 
   // delete the record
  else 
   // log potential CSRF attack.
 
?>

我不想使用上面的脚本,因为令牌是以隐藏形式传递的,攻击者不会通过使用 firebug 打开它来访问它。这是我自己的概念,使用用户登录会话数据 $_session['uid']session_regenerate_id();。使用下面的代码,我是否仍然容易受到 CSRF 攻击...

<?php
Assuming user is logged in and session has been initialized..
$session_start();

//Regenerate Session Id to ensure that Session Fixation Attack is not Possible...

session_regenerate_id();

$user_session = $_session['uid'];

 if (!$user_session=='') 
   // update the record
  else 
   // there is CSRF attack.
 

?>

【问题讨论】:

您引用的解决方案也使用会话。它生成一个令牌,将其保存到会话中,然后 填充隐藏字段。提交时,然后根据会话值验证提交的令牌值。 @patrick 要求仅检查用户会话数据并在我的脚本中实现 session_regenerate _id(),正如我发布的那样。我是否仍然容易受到 CSRF 攻击 但是您问题的整个基础都是基于错误的逻辑。您引用的解决方案并不像您认为的那样不安全。 “攻击者不会通过使用萤火虫打开它来访问它”这无关紧要,因为令牌保存在会话中。既然已经有很好的方法,为什么要重新创建***? 【参考方案1】:

我意识到最好的办法仍然是使用如上所述的 md5() 哈希函数,并在每次重新加载页面时生成一个新令牌。以隐藏形式传递令牌是安全的。谢谢

<?php
 session_start();
 $token= md5(uniqid());
?>

【讨论】:

以上是关于如何在php中进行跨站点请求伪造攻击的主要内容,如果未能解决你的问题,请参考以下文章

防止 asp.net Web 表单中的跨站点请求伪造 (csrf) 攻击

CSRFTester - 跨站点请求伪造漏洞测试程序

使用会话令牌或随机数进行跨站点请求伪造保护 (CSRF)?

[不常用] - CSRF(跨站点请求伪造)

跨站点请求伪造(CSRF)

Django网络安全跨站点请求伪造保护,CSRF如何正确使用