我正在用PHP编写一个Web应用程序(使用Codeigniter)。我只是想在这里提出一些安全建议。我有一个带删除方法的任务控制器。然后,删除任务的链接为http://localhost/task/delete/12345
所以我想知道如何处理这样一个事实:人们有能力修改链接,从而删除另一个任务(可能不是他们自己的)。
所以我想我的选择是在检索用户拥有该特定任务之前,还是在删除它之前,或者进行某种ID哈希检查?
有人有任何建议吗?
答案 0 :(得分:3)
所以我想我的选择是在删除之前始终检查用户是否拥有该特定任务
这是通常的,最好的方法,是的。对于许多用例来说,散列ID太不安全了:包含散列的链接存储在浏览器的历史记录中,可能会被E-Mailed环绕,出现在出站链接的REFERER标题中....
检查所有权,或使用完整的Access Control List,具体取决于权限的复杂程度。
答案 1 :(得分:2)
是,检查是否允许用户删除该任务并回复
HTTP/1.1 403 Forbidden
如果他不是。此外,执行破坏性操作,如删除记录POST请求。否则,请观看Google(或其他一些提取器类型的客户端),快乐地触发所有删除操作。
答案 2 :(得分:2)
建议不要通过http get请求更新/删除您的数据。改为使用帖子。
答案 3 :(得分:2)
是的,就是这样。散列id是没有意义的,好像有些用户猜到了另一个哈希id,他可能会从另一个用户中删除一个任务(这可能是通过默默无闻的安全性,而且它不是一个很好的安全方法)。所以,是的,在删除任务之前,该任务属于用户。所以我想我总是这样做 检查用户是否拥有该权限 删除之前的特定任务
此外,您的问题并不清楚,但要删除某些内容,用户应转到blablah.com/tasks/delete/1234
,然后确认通过POST删除任务(可能通过单击按钮提交表单)。
答案 4 :(得分:0)
您可以使用session存储要删除的项目ID,然后在删除页面上检查给定的id是否等于会话存储ID。
希望它可以帮到你