如果我允许网络爬虫查看此页面,如果它爬取每个页面上的每个删除链接,它不能删除整个数据库吗?
是的。
无法以某种方式找出调用 delete() 的页面的人无法在 $_GET 中使用他们想要的任何数字手动加载 url 并删除记录?
是的。
永远不要通过 CRUD 删除任何内容,而是将 Deleted 列添加到表中并使其看起来好像已被用户删除,这样会更好吗?
如果你真的想删除它,imo,删除更好。
我只是偏执狂吗?
一点也不。
如果您只有一个 delete.php 脚本,它具有以下内容(忽略 CRUD atm 并谈论 MySQL):
$q = "DELETE FROM mytable WHERE row = $_GET['id']";
$r = mysql_query($q);
那么是的,您的前两个担忧实际上是会发生什么。偶然发现这些链接的蜘蛛会导致数据库记录被删除,而发现这些链接的恶意用户同样可以从数据库中删除行。
这通常有两种处理方式:
不要将 delete.php 链接提供给不应该拥有它的人(未登录的人、未以管理员身份登录的人等)——但请注意,这只是一个细节,并没有保护您的数据库免受意外/恶意删除。
在 delete.php 脚本中,验证运行它的人是否被允许删除行。大部分时间是通过检查登录时设置的会话变量来完成的(例如if($_SESSION['can_delete'] != true){ die('Insufficient Privileges'); }
)。
尽管不将 delete.php 链接提供给不应该拥有它的人会很有帮助,但如果您希望它是安全的,则需要明确检查 delete.php 脚本中的权限。