java - 如何在ajax请求中编码参数?
问题描述
我有一个选择字段,
<form:form id="mediaForm" method="post" role="form">
<table>
<tr id="state" style="display: none;">
<td>
<form:select path="sCode" id="sCode"
onchange="getAllLists(this.id,'${contextPath}/main/getList.do','dCode','aCode')">
<form:option value="" label="--- Select ---" />
<form:options items="${state}" />
</form:select>
</td>
</tr>
</table>
</form:form>
单击此字段时,将调用另一个列表。现在,当我截获这个请求并将状态的值(例如,由 user = 03 选择)更改为 04 时,不会显示任何错误。我想 var val = $('#' + new_id).val();
在控制器上对其进行编码和解码,这样没有人可以在两者之间进行更改?请建议。尝试了 encodeURIComponent 但它对 url 进行编码,我想对值进行编码 state = 01 ;
function getAllLists(new_id, url, second_name,
image_value) {
var val = $('#' + new_id).val();
$.ajax({
url : url,
dataType : 'json',
data : {
state : val
},
success : function(data) {
$('#' + image_value).empty();
$('#' + image_value)
.append(new Option('Select...', ''));
$.each(data.list, function(arrID, group) {
$('#' + image_value).append(new Option(
group.desc, group.code));
});
$('#' + image_value).val("A");
}
});
}
某种参数污染攻击。
解决方案
如果我理解得很好:您的担忧是关于安全性。
HTTPS 已经在做加密工作了。
如果您不使用 HTTPS,则在没有第三方提供密钥的情况下在客户端进行加密的问题是这种方式不是私有的,因此不安全。
每个人都可以访问服务器给客户端的代码。这意味着可以看到服务器提供的加密密钥,因此,中间的人只需要使用他们希望您请求的值来复制加密。
最终,您可以尝试在客户端第一次连接到服务器时将加密密钥提供给客户端,然后在整个连接中使用它。它减轻了问题,但并没有消除它。
密码提示:加盐的 sha256 对我来说听起来不错。
推荐阅读
- python - Python 类属性更新未传播到父类
- python - 如何检查 EXACT python tcl-tk/tkinter 版本,iexyz 而不是 xy?
- cloud - Prefect Flow 运行:如何将运行日志发送到完美服务器?
- fuzzing - 是否可以告诉 libfuzzer 忽略某些代码?
- graphql - 为什么“清除本地存储”在 Fauna GraphQL Playground 中不起作用?
- html - 正文内容涵盖导航栏下拉
- javascript - 如何在不循环的情况下访问对象数组中的所有键和值
- javascript - JavaScipt window.location
- python - 如何在 Python 中像这个 awk 命令一样有效地执行 CSV 连接?
- javascript - HighCharts JS 显示额外的 xAxis 参数