【发布时间】:2014-04-21 17:15:24
【问题描述】:
我有一个非常大的表单,分为 5 个子表单。当您从 form1 转到 form2 时,form1 中的信息存储在 DB 中并创建了一个 userId。然后在 form2 中,这个 userId 被添加为隐藏输入。像这样的:
<form action="" method="post">
<input type="hidden" value="userIDnumber" id="userId" />
<input type="hidden" value="<?php echo base_url();?>" id="url" />
//form data
<input type="button" id="prevButton" value="Prev" />
<input type="submit" value="Next" />
</form>
如果用户决定要返回到 form1 编辑数据,当点击“返回”按钮时会发生以下情况:
var prev = document.querySelector('#prevButton');
if(!prev.addEventListener){
prev.attachEvent('onclick', prevPage);
}else{
prev.addEventListener('click', prevPage, false);
}
function prevPage(e){
var userId = document.getElementById('userId').value;
var url = document.getElementById('url').value;
var form = document.createElement('form');
form.setAttribute('method', 'post');
form.setAttribute('action', url + 'form/1');
form.style.display = 'hidden';
var input = document.createElement("input");
input.setAttribute("type", "hidden");
input.setAttribute("name", "userId");
input.setAttribute("value", userId);
form.appendChild(input);
document.body.appendChild(form);
form.submit();
}
我正在做的是创建一个隐藏表单,并在此表单中添加一个带有 UserId 的隐藏字段,以便在转到 form1 时,我可以检索用户刚刚发布的数据并在用户更改任何内容时更新数据库。
我的问题是,这是检索用户数据的安全方式吗?我是 javascript 的新手,所以我不确定这样做是否有办法让攻击者通过直接插入他们的 id 来访问其他用户的数据。
如果是这样,正确的安全方法是什么?我想也许可以使用会话,但我工作的客户不希望用户必须登录。
我还没有找到任何与此相关的问题,但如果有,我深表歉意,请指出问题所在。
感谢您的宝贵时间。
【问题讨论】:
-
ID 只是一个数字,因此除非攻击者可以访问您的数据库,否则该数字毫无意义。
-
然后您可以生成一些每个用户的密钥并在表单提交中使用它。
-
关于“隐藏”输入的事情是它们并没有真正隐藏。任何知道如何查看源代码的人都可以看到它们的内容。因此,它们是否“安全”实际上取决于它们包含的数据。
-
我建议您将表单数据存储到会话中,这样所有其他表单页面都可以使用它。
-
@Ant100 不。数据保留。除非你使用 session_unset() 和 session_destroy() 取消设置。
标签: javascript php forms codeigniter