【发布时间】:2012-12-26 10:25:41
【问题描述】:
在web应用中,当然很多情况下我们会支持CRUD(Create, Retriever, Update, Delete)
基本程序员会做类似下面的事情(没有验证):
delete?room_id=12
update?room_id=13
显示的 room_id 仅适用于属于用户/客户的房间。 第一个身份验证仅使用用户名和密码。嗯,这是一个标准。
但我认为我们不应该相信用户。不良用户可能会猜到不属于他的 room_id。喜欢delete?room_id=199
我问我的程序员朋友,他们甚至都没有考虑过这个问题。
所以为了防止这种情况,我有一个基本的解决方案,总是为任何相关对象传递 user_id。在任何操作之前进行此类查询is the room_id belong to the user。
如果这是唯一的解决方案,那么我必须修改我已经编写的所有查询。
问题是,对于这个基本问题有什么好的或更好的解决方案吗?
谢谢
【问题讨论】:
-
@Art:$_POST 如何解决这个问题?基本问题是找到检查对象是否属于用户的最佳方法。这不仅是一个对象,而且将是可能的对象。比如房间、地址、衬衫等
-
你有没有同时包含 user_id 和 room_id 的数据库?和@Art Planteur,用户也可以发布任何数据,只是在隐藏字段中
-
我的评论是关于如果不良用户尝试修改 GET 可能会产生错误。 POST 可以解决这个问题。根据您上面的回答,您需要一个请求来检查 room_id 是否与 user_id 存在。你的数据库结构如何?
-
赞成成为您和您的同事中唯一关心安全的人。
标签: php database security web-applications authorization