- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试确定使用 php 和 MySQL 在 CRUD 中进行删除的最安全方法或最佳实践。我被教导的方式是创造<a href="delete.php=?{$id}">Delete</a>
链接并让 delete.php 运行我的 delete()
在 $_GET
中传递的 id 上的方法变量。
如果我允许一个网络爬虫看到这个页面,如果它抓取了每个页面上的每个删除链接,它不能删除整个数据库吗?
不知道有人想出了调用 delete()
的页面在 $_GET
中使用他们想要的任何数字手动加载 url并删除记录?
永远不要通过 CRUD 删除任何内容,而是向表中添加一个 Deleted 列并使其对用户看起来好像已被删除会更好吗?
我只是偏执狂吗?
最佳答案
如果我允许网络爬虫看到这个页面,如果它抓取了每个页面上的每个删除链接,它不能删除整个数据库吗?
是的。
莫名其妙地找出调用 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 链接——但请注意 这只是一个小细节,并不能保护您的数据库免遭意外/恶意删除。
在 delete.php 脚本中,确认允许运行它的人删除行。大部分时间是通过检查登录时设置的 session 变量来完成的(例如 if($_SESSION['can_delete'] != true){ die('Insufficient Privileges'); }
)。
尽管不向不应该拥有 delete.php 链接的人提供 delete.php 链接是有帮助的,但如果您想要它,则需要在 delete.php 脚本中明确检查 权限安全。
关于PHP MySQL 增删改查 : Am I deleting safely?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10458319/
我是一名优秀的程序员,十分优秀!