我应该使用用户可以运行的PHP脚本删除MySQL条目吗?

时间:2013-07-24 16:37:55

标签: php mysql database security web

我目前正在开设一个网站,上面会有很多用户。这些用户存储在一个表中,每个表都具有唯一的ID。该网站将包含用户可以完成的项目,这些项目也存储在具有唯一ID的单独表中 我需要让用户有一个他们可以查看的页面,它将显示他们当前正在处理的所有项目的列表 为此,我将设置另一个表,其中每一行都有用户的id以及他们正在处理的项目ID。所有这些都可以正常工作,但我想允许用户取消他们的项目。我知道如何做到这一点,但我已经读过直接从php脚本中删除行是不安全的,因此用户从PHP访问数据库时没有'DELETE'权限。
我想知道我是否当用户指定要删除的项目或者我应该只有另一个字段并且只是将每个用户项目行标记为在另一个字段中被“取消”时,我应该随意删除行,这样我就可以自己使用它们了。

2 个答案:

答案 0 :(得分:1)

为了最大限度的安全性,您应该做的是,在数据库表中有一个名为“isActive”的参数,或者那种性质的参数,它是表示布尔值的BIT数据类型。如果该布尔值为false,则不要从数据库中删除项目,只需隐藏该表数据(不要在站点上显示它,但保留数据存储在数据库中)。这样,您的数据库不仅可以防止想要销毁数据的恶意用户,而且如果他们希望重新安装项目,也可以“重新设置”项目。如果项目在一段时间内(例如14天),如果您愿意,只需让服务器删除它,而不是用户。这对我来说过去很有用。

希望这有帮助!

答案 1 :(得分:1)

解决此问题的最常见方法是在表中创建一个可用于将记录标记为已删除的字段。就删除而言,这将是普通用户对表的唯一访问权限。有些人还有一个完全删除,它清楚地表明在操作完成后它将永远不会再被访问。

就个人而言,我更喜欢保留对管理员的完全删除权限,允许用户仅将记录标记为已删除。如果您担心空间,请同时添加上次访问的字段,并按设定的时间间隔安排一次调用,对任何标记为已删除且在一段时间内未激活的记录执行完全删除。