所以,我已经从几个来源一起攻击了这个,所以如果我完全采用错误的方式,我欢迎反馈。我也觉得这是不可能的,因为它可能是一种旨在防止恶意使用此行为的安全检查。
但无论如何:
我在Django网站上有一个表单,人们可以请求更改我们其中一个项目的名称,这应该会自动创建一个jira票证。这是以下形式:
<form target="_blank" action='http://issues.dowjones.net/secure/CreateIssueDetails!init.jspa' method='get' id='create_jira_ticket_form'>
<a id='close_name_change_form' class="close">×</a>
<label for="new_name">New name: </label>
<input id="new_name" type="text" name="new_name" value="{{item.name}}">
<input type="hidden" value="10517" name="pid">
<input type="hidden" value="3" name="issuetype">
<input type="hidden" value="5" name="priority">
<input type="hidden" value="Change name of {{item.name}} to " name="summary" id='summary'>
<input type="hidden" value="{{request.user}}" name="reporter">
<input type="hidden" value="user123" name="assignee">
<input type="hidden" value="" name="description" id="description">
<input id='name_change_submit' class="btn btn-primary btn-sm" type="submit" value="Create JIRA ticket">
</form>
然后我有一个小JS用新值修改字段:
$(document).ready(function(){
$('#create_jira_ticket_form').submit(function(){
var watchers = ' \[\~watcher1\] \[\watcher2\]';
var new_name = $('#new_name').val();
var summary = $('#summary').val();
$('#summary').val(summary + new_name);
$('#description').val(summary + new_name + watchers);
})
})
它非常接近工作,但说明字段已转义,使其看起来像:
将OLDNAME的名称更改为NEWNAME%5B%7Ewatcher1t%5D%5B%7Ewatcher2%5D
哪个不太有帮助。如何保持原样,以便添加观察者?
答案 0 :(得分:0)
当您的表单对表单中的字段和值进行编码时会发生这种情况。
你可以通过这个简单的片段试试这个:
console.log($('form').serialize());
你应该看到像这样的东西
description=ejdd+%5B~watcher1%5D+%5Bwatcher2%5D
为了防止这种情况发生,您应该将method='get'
更改为method='post'
。
编码的发生是因为它是HTTP的一部分,read here why 您还可以阅读the spec paragraph
17.13.3处理表单数据