我正在为Trac开发一个插件并尝试向数据库提交一些信息
该计划是:
当我使用旧的0.11版本时,一切都很好。 (不确定是不是这个原因。
该公司我一直在更新Trac工作到目前稳定的1.0.1版本,现在出现了一些问题。
在没有任何数据的情况下发送POST请求:
$.post("trac_dep_policy");
很好,但如果我尝试添加一些数据:
$.post("trac_dep_policy", { name: "John", time: "2pm" } );
我收到400 Bad Request错误。 经过一些调试后,我发现它是针对我的CSRF攻击的保护。 (网络/ main.py)
问题很简单 - 我该如何处理?
答案 0 :(得分:1)
CSRF保护是auto-added to each form,结合了就地Genshi模板修改和POST请求的回读,我知道这已经在Trac 0.10.2发布中很早就添加了修复版本以便清楚
您需要使用XMLRPC协议(请参阅XMLRPC plugin)或自行阅读隐藏的表单令牌。
答案 1 :(得分:0)
答案很简单:
就像@hasienda在他的回答中提到的那样 - 在Trac中的每个表单都在div
元素中提供了隐藏输入,其中包含某个name
标记和一个标记value
:
<form>
<div>
<input type="hidden" name="__FORM_TOKEN" value="9c69c37f52f669fb99b095e4">
</div>
</form>
现在,通过ajax成功发布POST请求所需的一切就是将此__FORM_TOKEN
值与您的数据一起传递:
var token_value = $("input[name=__FORM_TOKEN]").val();
$.post(url, {__FORM_TOKEN: token_value, data: your_data})