从mysql中删除数据最安全的方法是什么? (PHP / MySQL的)

时间:2010-05-09 00:09:13

标签: php mysql

我想允许用户和我(管理员)删除mysql中的数据。 我曾经有过remove.php,可以从需要删除的内容中获取$ _GETs,例如... remove.php?action = post& posting_id = 2。但我了解到任何人都可以简单地滥用它并删除我的所有数据。

那么对于用户和我来说,最安全的方法是删除信息而不会让所有人疯狂和努力?我只是一个初学者:) 我不确定我是否可以使用POST,因为没有表格且数据没有变化。 会议好吗?或者会有太多的帖子,用户信息,评论等。

Ex:James想删除他的一个帖子(post_id = 5)。所以他点击了删除链接,这就是他要删除.php?action = post& posting_id = 5。

编辑:好吧,现在我有点困惑。虽然我无法100%安全,但我如何使用$ _POSTs执行此操作? 我应该使用GET来获取所有数据remove.php,然后有一个确认提交按钮,当用户点击它时,它将所有数据放入POST并从dbc中删除?

3 个答案:

答案 0 :(得分:6)

删除记录是一种可怕的做法。如果您或某人犯了错误,则无法真正解决问题。清除记录非常难以复活。

您可以添加“活动”位(例如布尔值)列,而不是删除记录,当用户“删除”记录时,该列会切换为关闭。基本上,您的用户将通过切换来暂停记录,并且在出现错误或滥用的情况下保存记录,但会向用户显示“已删除”。要使其与其他查询一起使用,只需添加active = 1的where子句。

然后,您可以拥有一个在某个特定日期间隔运行的实用程序脚本,该脚本将清除已弃用的过去日期记录。您还需要某种类型的时间戳来进行此类维护。

只是一个想法。拿出它的价值。

答案 1 :(得分:2)

我会回复gurun8更喜欢将记录“标记”为已删除,而不是实际删除数据。显然,您需要检查经过身份验证的用户是否有权删除帖子。

然而,由于cross-site request forgery,即使使用身份验证, $_GET也不安全。非常非常重要。

想象一下,如果亚马逊根据GET请求向您的购物车添加内容。我所要做的就是在我的页面上放置一个带有该URL的图像,访问该页面并登录到亚马逊的所有人都将自动添加产品。

为了配合你的例子,我不喜欢Jame的帖子,所以我在我的网站上放了一个像这样的图像:

<img src='http://example.com/remove.php?action=post&posting_id=5'>

我向他发送了一个指向我页面的链接,并要求他查看,希望当时他登录到您的网站。因为,当然,他点击了那个“让我登录”按钮。

所以关注使用GET 是正确的。如果您不想使用表单乱丢页面,请按POST确认操作。

答案 2 :(得分:0)

您必须首先使用登录脚本对用户进行身份验证。

如果您想要最简单的解决方案,那么我建议使用简单的.htaccess username and password来保护您拥有remove.php的目录。

如果不同的用户拥有删除数据库条目的不同权限,那么您可能应该创建一个PHP登录脚本并使用PHP会话。

如果我是愚蠢的话,请告诉我,但我搜索了一段时间,可以将一个简单的PHP登录教程放在一个真实的网站上(不使用session_register(),使用mysql_real_escape_string(),htmlspecialchars()等)我根本找不到一个!

可能this最接近,你必须用$ _SESSION替换session_register()变量才能在没有register_globals的情况下工作(默认情况下在PHP5中)。