首页 > 解决方案 > 如何在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");

                }
            });
}

某种参数污染攻击。

标签: javajqueryajax

解决方案


如果我理解得很好:您的担忧是关于安全性。

HTTPS 已经在做加密工作了。

如果您不使用 HTTPS,则在没有第三方提供密钥的情况下在客户端进行加密的问题是这种方式不是私有的,因此不安全。

每个人都可以访问服务器给客户端的代码。这意味着可以看到服务器提供的加密密钥,因此,中间的人只需要使用他们希望您请求的值来复制加密。

最终,您可以尝试在客户端第一次连接到服务器时将加密密钥提供给客户端,然后在整个连接中使用它。它减轻了问题,但并没有消除它。

密码提示:加盐的 sha256 对我来说听起来不错。


推荐阅读