繁体   English   中英

CSRF Token添加到PHP表单中的简单方法

[英]CSRF Token simple way to add to forms in PHP

我已经开发了一个很大的项目,我正在考虑通过在会话变量中保存令牌并以每种形式发送该令牌以检查它是否正确来防止CSRF攻击,从而提高安全性。

问题在于该项目具有多种形式,可能会很痛苦并且需要花费大量时间来遍历每种形式,以便将令牌添加到隐藏的输入中。

所以我问自己,是否有任何简便的方法可以将隐藏的价值添加到每种表单中,而不必遍历每种表单? 也许使用jquery,我可以本地化页面内的每个表单以添加隐藏的输入,然后添加常规的$ _POST / $ _ GET函数以检查令牌是否正确。

这是一个想法,但可能还有另一种简单更好的方法。 有没有简单,快速和体面的方法来做到这一点? 在这种情况下最好的方法是什么(在项目开发后准备CSRF攻击预防)。 据我所知,防止CSR攻击的最佳方法是使用令牌变量,也许还有另一种不错的方式来做到这一点,而不必使用令牌并检查每种形式吗?

请参阅此处: 使用JQuery自动以所有形式插入CSRF令牌

您可以在函数中添加一些代码,并在<script>标记中内联,如下所示:

jQuery(document).ready(function() {
  jQuery("form").each(function() {
    var tokenElement = jQuery(document.createElement('input'));
    tokenElement.attr('type', 'hidden');
    tokenElement.attr('name', 'token');
    tokenElement.val(<?= $token ?>);
    jQuery(this).append(tokenElement);
  });
});

这将自动将服务器端$token添加为每个<form>元素的隐藏表单字段。

如果您希望在不进行任何服务器端处理的情况下实现此目标,并且可以将上述所有代码都包含在.js文件中,那么可以将令牌存储在cookie中,并只需访问此值客户端即可(使用COOKIE插件 ) :

tokenElement.val($.cookie("csrftoken"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM