当前位置: 首页 > 面试题库 >

防止PHP中的CSRF

葛越
2023-03-14
问题内容
  1. 在GET和POST参数中不仅需要cookie,还需要身份验证。

  2. 检查HTTP Referer头;

在Wikipedia上看到了这篇文章,想知道如何应用它们

好的…我正在使用Kohana PHP框架,并且具有确定引荐来源标头的功能,但是究竟要检查引荐来源标头中的什么内容呢?框架函数仅返回引荐来源网址

以及如何验证GET和POST参数?反对什么?存储的信息?预期的类型?


问题答案:

为了防止CSRF,您需要验证一次令牌,该令牌已过POST,并与当前会话相关联。类似以下内容。。。

在用户请求删除记录的页面上:

Confirm.php

<?php
 session_start();
 $token = isset($_SESSION['delete_customer_token']) ? $_SESSION['delete_customer_token'] : "";
 if (!$token) {
     // generate token and persist for later verification
     // - in practice use openssl_random_pseudo_bytes() or similar instead of uniqid() 
     $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();
 // validate token
 $token = isset($_SESSION['delete_customer_token']) ? $_SESSION['delete_customer_token'] : "";
 if ($token && $_POST['token'] === $token) {
   // delete the record
   ...
   // remove token after successful delete
   unset($_SESSION['delete_customer_token']);
 } else {
   // log potential CSRF attack.
 }
 session_write_close();
?>

令牌应该很难猜测,对于每个删除请求都是唯一的,只能通过$ _POST接受,并且在几分钟后过期(此示例中未显示过期)。



 类似资料:
  • 问题内容: 您能建议我如何在不丢失原始消息数据的情况下防止PHP中的电子邮件注入吗?例如,如果我需要让用户使用,,等,所以我不想完全剥夺他们从消息了- 我仍然希望他们供货,但没有增加任何额外的头或以某种方式使邮件注入的情况发生。 互联网上的大多数建议都建议完全删除该数据-但我不想这样做。 我正在通过PHP 函数发送纯文本(非HTML)消息。 您有什么建议? 问题答案: 要过滤有效的电子邮件以在收件

  • 本文向大家介绍php防止CC攻击代码 php防止网页频繁刷新,包括了php防止CC攻击代码 php防止网页频繁刷新的使用技巧和注意事项,需要的朋友参考一下 网页快速恶意刷新,cc攻击就是攻击者利用代理服务器生成指向目标站点的合法请求,模拟多用户不停的对受害网站进行访问,特别是访问那些需要大量数据操作需要大量CUP时间的页面,最终导致目标网站服务器资源耗尽,一直到宕机崩溃,如此一来,造成服务器资源的

  • 问题内容: 如何防止在php mysql中输入重复记录?在插入表之前验证输入。 我目前正在为我的网站建立一个用户注册部分,但是如果在数据库中发现重复的用户名或电子邮件地址,我想向他们显示一个错误。 编辑 这是我到目前为止要插入的行…我将如何在这里实现这两个答案: 我猜我可以在if … else语句中实现所有功能吗? 问题答案: 我使用了sql语句以及if else语句。 然后 显示错误消息,以防止

  • 本文向大家介绍PHP中防止SQL注入方法详解,包括了PHP中防止SQL注入方法详解的使用技巧和注意事项,需要的朋友参考一下 问题描述:   如果用户输入的数据在未经处理的情况下插入到一条SQL查询语句,那么应用将很可能遭受到SQL注入攻击,正如下面的例子:   因为用户的输入可能是这样的:   那么SQL查询将变成如下:   应该采取哪些有效的方法来防止SQL注入?  最佳回答(来自Theo):

  • 本文向大家介绍PHP中怎样防止SQL注入分析,包括了PHP中怎样防止SQL注入分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了PHP中怎样防止SQL注入。分享给大家供大家参考。具体分析如下: 一、问题描述:   如果用户输入的数据在未经处理的情况下插入到一条SQL查询语句,那么应用将很可能遭受到SQL注入攻击,正如下面的例子: 因为用户的输入可能是这样的: 那么SQL查询将变成如下:

  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容,并且查询变为: 如何防止这种情况的发生? 问题答案: 使用准备好的语句和参数化查询。 这些是独立于任何参数发送到数据库服务器并由数据库服务器解析的SQL语句。这样,攻击者就