首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在php中跨站点请求伪造攻击

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

Stack Overflow用户
提问于 2018-03-30 15:41:43
回答 1查看 181关注 0票数 0

我在Stackoverflow.com上读过很多关于如何防止CSRF攻击的文章。我在这里找到的解决方案似乎不是我想要的方式。这里是stackoverflow.com的答案,从下面的链接,谁试图删除记录,同时确保CSRF攻击是不可能的。

preventing csrf in php

confirm.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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的攻击.

代码语言:javascript
复制
<?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.
 }

?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-20 06:52:32

我意识到最好的选择仍然是像上面提到的那样使用md5()散列函数,并在每个页面重新加载时生成一个新的令牌。以隐藏的形式传递令牌是静态安全的。谢谢

代码语言:javascript
复制
<?php
 session_start();
 $token= md5(uniqid());
?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49577277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档