如果发生 SQL-注入,你如何逆转它

If SQL-Injection were to happen how do you reverse it

我打算开始数据库设计 PHP。但是当我这样做时,我非常担心 SQL-Injecting。无论如何,当它发生时是否可以扭转这种情况。比如自动重置它,或者删除被黑的帐户,或者关闭数据库。还有一种方法可以针对入侵者进行自动测试吗?

如果您获得 SQL 注入,攻击者将获得与您的应用程序相同的权限,他们可以删除或更改他们想要的任何内容,所以基本上您就不走运了。您可以从备份中恢复数据库,但是您会丢失备份和攻击之间发生的任何更改。

与其尝试检测和还原 SQL 注入,不如首先避免允许它们,避免 SQL 注入的一个好方法是使用 PDO's prepared statements

这是一个非常复杂的问题。 简短的回答是:不,如果不存在备份

长答案: 您应该主要关注如何防止 sql 注入,例如使用准备好的语句是防止这些攻击的好方法。无论潜在的 sql 注入漏洞如何,都应定期备份并存储在不同的物理位置。带有数据库的服务器的数据中心可能会烧毁并且您的数据消失了。虽然这不太可能发生,但并非不可能。

根据数据库中数据的重要性,可以通过多种方式(例如 cron 作业)每周、每天、每小时等进行备份。如果您有第二台服务器,您可以编写一个脚本将备份发送到第二台服务器,或者您不时登录并下载它们。

您还可以记录数据库中的所有交互和更改,但扭转这种方式造成的损害是不切实际的。

这个 link 您可能会感兴趣:Prevent SQL Injection in PHP

简而言之,如果发生这种情况,您几乎已经输了。断开数据库与 Internet 的连接并评估损坏情况,转储损坏的版本以供日后分析之类的,然后恢复到最近的未损坏备份,这可能是大多数情况下的最佳做法。

但是你应该做的是首先防止它。 虽然可以进行转义 and/or 模式检查,但最好使用 prepared/parameterized 语句 and/or 对象关系映射来解决它。 许多主要框架都带有某种形式的 ORM,除非您对涵盖所有安全漏洞非常有信心,或者在安全性完全可选的情况下,否则我强烈建议您使用类似的东西。 除了 SQL 注入之外,这还将保护您免受各种其他安全风险,并在其他方面为您提供帮助。
例如,看看 FuelPHP.