公开SQL行的ID号是否存在安全风险?
例如,有一个ID为12的事件。
如果有人通过http://example.com/events/12
访问它,或者有人向http://example.com/events/12
发布POST以更新该记录(假设我当然允许这样做),这是一个安全问题吗?
答案 0 :(得分:4)
向用户公开ID的问题通常在Web安全上下文中称为“不安全的直接对象引用”。
来自OWASP:
防止不安全的直接对象引用需要选择保护每个用户可访问对象的方法(例如,对象编号,文件名):
深度防御方法是同时进行1& 2。
答案 1 :(得分:2)
是否显示,无所谓。
重要的是,您检查调用者是否已通过身份验证并且有权执行所请求的操作。
有人可能会向http://example/events/x
吐出请求,其中x是递增数字。也许这是一个试图查看http://payroll/employee/x
的史努比员工。
对用户进行身份验证,以确保他们是他们所说的人。表单身份验证,LDAP,你有什么。
确保用户有权在调用时执行每个操作。通常,用户属于有权更新老板工资,创建货件或取消信用卡的组。
如果您实施上述措施,id
的来源无关紧要,无论是在cookie,隐藏表单元素,查询字符串,会话变量等等。
答案 2 :(得分:0)
当您使用整数标识符时,URL和查询字符串特别不安全。毕竟,如果有一个12,几乎可以肯定是11或10. GUID使得更难猜测另一个项目,但仍然不应该被认为是安全的IMJO。
结论:您需要某种身份验证机制来确保用户是他声称的用户,以及授权机制以确保他能够看到您要向他展示的内容。