当前位置:  开发笔记 > 编程语言 > 正文

如何用CSRF测试快递表格?

如何解决《如何用CSRF测试快递表格?》经验,为你挑选了1个好方法。

我正在尝试为我的服务器端表单验证编写测试,但我一直收到Forbidden错误.看起来这需要一个两步的过程.步骤1,从表单中获取CSRF值.步骤2,使用CSRF值发布到表单处理程序.但无论我如何尝试发布,我都会收到一个禁止的错误.

--full test:https://github.com/socketwiz/swblog/blob/master/test/contact.js#L57-L100

我试过改变以下行:https: //github.com/socketwiz/swblog/blob/master/test/contact.js#L85

.send({name: 'foo', 'X-CSRF-Token': token})

.set('X-CSRF-Token', token)

.set('Cookie', ['X-CSRF-Token=' + token])

但我尝试的任何东西似乎都无法满足CSRF的要求.我越是尝试越复杂,这似乎是一件简单的事情.也许我说这一切都错了.有任何想法吗?



1> Ricky Nelson..:

谢谢@shawnzhu,你对cookies的评论帮助我找出了我需要做的事情.我有一个想法,我让它复杂化了.这是我想出的:

https://github.com/socketwiz/swblog/blob/master/test/contact.js

it('should not post just a name', function(done) {
    request(mock)
      .get('/contact')
      .end(function(err, res){
        var $html = jQuery(res.text);
        var csrf = $html.find('input[name=_csrf]').val();

        request(mock)
          .post('/api/contact.json')
          .set('cookie', res.headers['set-cookie'])
          .send({
            _csrf: csrf,
            name: 'Mary Jane'
          })
          .expect(function(res){
            assert.equal(undefined, res.body.name);
            assert.equal('You must provide a valid email address', res.body.email);
            assert.equal('You must provide a message', res.body.message);
          })
          .expect(500, done);
      });
});

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有