什么是生成csrf令牌并验证的最佳方法.从我能够收集到的内容来看,即使你在"帖子"形式中有一个隐藏的表单字段,黑客也可以使用ajax简单地获取该表单,获取csrf令牌并向站点发送另一个请求以提交表单.
如果我们要检查发送给我们的标头...那么黑客可以简单地将csrf标记发送到服务器端脚本,然后模拟http标头.
那么如何实际生成和验证csrf令牌呢?
我继承了一些最近被攻击的代码,攻击者发送了重复的远程表单提交.
我使用我为每个用户创建的会话身份验证令牌(而不是会话ID)实施了预防.虽然我意识到这个特定的攻击不是CSRF,但我从这些帖子中调整了我的解决方案(尽管已过时).
但是,它仍然觉得这里存在一些漏洞.虽然我知道没有什么是100%安全的,但我有一些问题:
最后,我正在寻求更好的理解,以便我可以实现更强大的解决方案.
我正在研究我经常听到的东西,当你在JSF 2.0中进行webapp时,你已经受到了保护,不受跨文件的攻击 - 请求伪造.以下来自SO帖子的摘录证实了这一点:
在JSF 2.0中,通过使用长而强的自动生成值而不是相当可预测的序列值来改进这一点,从而使其成为强大的CSRF预防.
有人可以提供更多细节吗?这种自动生成的价值如何阻止CSRF?谢谢!
据我所知,默认情况下Rails没有CSRF对HTTP GET请求的保护,因为它声称它们是幂等的.但是,从这些GET请求返回给用户的敏感信息,我不希望恶意站点检索此信息.
在Rails中保护HTTP GET请求的最佳方法是什么CSRF?
ruby-on-rails csrf protect-from-forgery csrf-protection ruby-on-rails-3.1
这个问题比直接关于如何编码的问题更像是一种再保险.作为一个autodidact我没有很多可能性问专业人士这样的事情,所以我在这里尝试.
我已经阅读了django-docs(https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/)中的文档以及该页面上的一些信息:http://cwe.mitre.org/top25 /#CWE-352
据我所知,django向用户提供了一个令牌(某种代码).为了验证它真的是他,他必须在下次提出请求时将其归还.谷歌的一些人发现,甚至可以通过ajax请求实现这一点,这就是为什么我们自1.2.6以来也有保护它们的新政策.CSRF是关于某人给我一些东西(坏的,危险的代码,腐败的文件或类似的东西)假装成其他人.
所以如果我有这样的代码:
@csrf_exempt
def grab(request):
"""
view to download an item
POST because it stores that a user has downloaded this item
"""
item_id = request.POST.get('item', None)
if not loop: return HttpResponseBadRequest('no item id provided')
item = Item.objects.get(pk=int(item_id))
Run Code Online (Sandbox Code Playgroud)
应该保存,因为在尝试将给定值转换为整数之前,我没有访问数据库或应用程序的任何部分.如果我对某人下载文件的记录错误(在这种情况下几乎没有),则没有太多损害.假设我会根据这个观点编写账单,CSRF豁免会有不同的想法(是吗?).
我也不明白为什么有人不能从用户那里窃取CSRF令牌并使用它来欺骗我(或用户).所以我对这个主题有一些疑问:
1)我的假设来自上面吗?
2)有人可以告诉我,有些不那么好的家伙可以使用上面的观点来做肮脏的伎俩(也可能是怎样),他们会是什么?
3)CSRF是中间人攻击的一个例子,它只与它有关,还是完全不同的东西?
4)有关这些危险的进一步阅读的任何有价值的链接?
也许其中一些问题听起来并不太明确,但我正试图克服这个问题.如果有人可以帮助我,我会很高兴.
我正在实现一个API,它既可以使用API密钥,也可以使用CSRF令牌.目标是通过Web应用程序(受CSRF保护)或第三方应用程序(受API密钥保护)使用它.
基本上每个请求(都通过POST),我检查是否有API密钥.如果有一个有效的,那就好了.如果没有,我想回到验证CSRF.
我可以打电话来验证CSRF吗?视图本身是@csrf_exempt因为API密钥需要工作.
在Aurelia中,似乎还没有任何对CSRF保护的支持,而AngularJS的XSRF-TOKEN头部是由AngularJS框架自动设置的所有XHR请求.
我应该如何保护Aurelia应用程序免受CSRF攻击?我应该根据OWASP CSRF预防备忘单推出自己的支持,还是已经为Aurelia提供了其他选择?
我想在jQuery的更改事件上上传服务器上的图像但是使用codeigniter csrf我只能上传图像一次.如何使用ajax为多个请求上传图像.请在设置时记住
config['csrf_protection'] = FALSE;
Run Code Online (Sandbox Code Playgroud)
然后我能够发送多个请求jQuery onchange事件,但是当csrf_protection将为false时,我认为没有csrf的优势.所以问题是如何在启用csrf_protection时使用ajax发送多个请求.我的jquery代码如下
$("#avatar").change(function(){
var link = $("#avatar").val();
$.ajax({
url : "<?php echo base_url('main/test'); ?>",
type: 'post',
data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',"id":"hello","link":link},
success : function(data)
{
alert(data);
}
});
});
Run Code Online (Sandbox Code Playgroud) 我试图在一个应用程序中实施针对CSRF的保护.
在PHP中,它实现起来相对简单.关于如何使用Extjs,我有很多问题.
我读过的EXTJS书籍没有涉及这个主题,我无法在互联网上找到关于这个主题的具体指导 - 使用EXTJS.
一些问题:
使用PHP,令牌被发送到EXTJS?
我是否必须像PHP一样在每个表单中创建一个隐藏字段?
我是否必须在Ext.Ajax.requestt中向服务器端发送令牌?这该怎么做?
一些非常简单的代码作为起点:
class Token:https://www.youtube.com/watch?v = VflbINBabc4
<?php
class Token {
public static function generate() {
$_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32));
}
public static function check($token) {
if(isset($_SESSION['token']) && $token === $_SESSION['token']){
unset($_SESSION['token']);
return true;
}
return false;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
询问
<?php
require('conect.php');
require_once('token.php');
$action = $_REQUEST['action'];
switch($action){
case "create":{
$records = $_POST['records'];
$data = json_decode(stripslashes($records));
if(isset($_POST['cars'], $_POST['token'])){
$cars = $data->{'cars'};
if(Token::check($_POST['token'])){
$sqlQuery = "INSERT INTO the_cars (cars) VALUES (?)"; …Run Code Online (Sandbox Code Playgroud) 我正在开发一个Web API.身份验证是通过cookie.所有端点都JSON在请求正文中接收参数.
我是否需要实施CSRF token保护它们?这怎么可以被利用?是否可以通过普通<form>元素发送JSON ?
攻击者有可能拥有这样的东西吗?
<form type="application/json" method="POST">
<input name="json" value="{ my json code here }">
<input type="submit">Send</input>
<form>
Run Code Online (Sandbox Code Playgroud) csrf-protection ×10
csrf ×6
php ×3
django ×2
django-csrf ×2
javascript ×2
security ×2
ajax ×1
api-design ×1
aurelia ×1
codeigniter ×1
extjs ×1
extjs5 ×1
jquery ×1
jsf ×1
token ×1
xss ×1