安全的html表单变量

时间:2014-05-12 22:33:42

标签: javascript html html-form secure-coding inspect-element

我不希望我的用户能够使用inspect元素更改('+ res.id +')和('+ res.level'),因为如果他们这样做,则会更改提交按钮的结果。

例如'+ res.id +'= 2且2等于fireragon,但如果此人使用inspect元素,则可以将2更改为1,1等于lightningdragon。然后当他们点击战斗时,火龙就变成了闪电龙。基本上他们可以和任何他们想要的人战斗。

是否有任何方法可以阻止人们更改这些变量或检查变量是否已更改,以便我可以向用户发送错误消息?

                html += '<form name="input" action="ingame.php?page=attack/travel/startbattle" enctype="multipart/form-data" method="post">';
                html += '<input type="hidden" id="goid" name="goid" value="'+res.id+'">';
                html += '<input type="hidden" id="level" name="level" value="'+res.level+'">';
                html += '    <input type="submit" value="Battle!" class="button"/>';
                html += '</form>';

2 个答案:

答案 0 :(得分:2)

如果要存储可信任的变量,则不要将它们发送到客户端,而是仅将它们保留在服务器内存中(使用会话状态,数据库或在请求之间保留的其他后备存储)。 / p>

如果您需要与客户共享价值,请将其发送出去,但不要接受用户的输入。

作为第三种选择,如果您有一个完全无状态的服务器并且需要向客户端公开值,那么您可以加密和/或签署这些值,这样当它们从客户端返回时您可以验证它们没有被篡改过。使用消息身份验证代码就是这种方法的一种实现:http://en.wikipedia.org/wiki/Message_authentication_code

答案 1 :(得分:0)

您无法阻止用户向表单端点提交他们喜欢的任何参数。即使您可以以某种方式阻止更改表单值,也可以使用curl等将自定义请求发送到服务器。

您需要输入值的服务器端验证。您可能需要存储可在提交表单时检索的中间对象,然后您不必将这些值作为隐藏字段携带。