我正在开发一个简单的网络应用程序,当我发现我可以使用Chrome编辑该表单的输入默认值时,用户可以使用表单输入信息 - >检查元素并提交具有不同hacked
值的页面。
代码:
<input id="radioOk_100237" name="radio_100237" type="radio" checked="" value="0">
正常情况下,我加载页面然后使用Google Chrome Check Element,我将此复选框作为目标并在提交之前将值更改为“9”,在我的后台页面中,它显示为“9”而不是预设值来自此输入元素的“0”。
如果每个用户都更改了值并提交,它将彻底打乱我的数据库。这怎么可能,我应该在提交之前加密页面或做些什么?我完全迷失了,顺便说一下,我正在使用PHP。
答案 0 :(得分:15)
对于典型用户,您只需将属性readonly
添加到表单字段即可。
对于尝试操作服务器的更高级用户/黑客,您需要验证提交的每个数据片段,以确保捕获和拒绝篡改。没有客户端技术可以防止篡改。
答案 1 :(得分:3)
您需要进行服务器端验证,以确保从客户端应用程序获得的值有意义。如果您知道值“9”将“摧毁您的数据库”,请不要接受来自客户端的值9。
强制性XKCD链接:http://xkcd.com/327/
答案 2 :(得分:2)
您无法阻止用户修改,添加或删除DOM中的元素。如果你想要那种控制,你应该将你输出的元素的值存储在一个对象中,然后比较来自表单的内容。
如果你想发布一个例子
,有一百万种方法可以做到这一点答案 3 :(得分:2)
您可以在服务器端检查正确的值类型。实际上,您应该检查从客户端发送的每个数据以防止攻击