我几乎准备好将我的网站转移到我的虚拟主机上,但在此之前,我希望尽可能地对其进行保护。我听说过 MySQL 注入和您可能面临的其他问题,我将如何保护我的网站、MySQL 数据库和文件免受它们的侵害?
我打算从 mysql 扩展更改为 mysqli 或 PDO,你推荐哪个?
我个人会使用 PDO,它比 mysqli 更好。如果您不知道 mysql 注入是将原始数据插入到这样的查询中:
$query = "SELECT * FROM users WHERE username='" .$_GET['user']. "' AND password='" .$_GET['password']. "'";
在不清理输入的情况下,如果有人输入 admin 作为用户名和' OR '1'='1
密码,则查询变为:
SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1'
这会导致查询忽略密码并以管理员身份登录,只要 1=1,它总是这样做。只需使用 mysql,您就可以mysql_real_escape_string($_GET['user'])
转义任何可能影响查询的内容,例如数据库可以理解的“将变为 \”。请注意,攻击者可以做比以管理员身份登录更糟糕的事情,例如,他们可以使用 drop 命令删除您的整个数据库结构并在其后注释掉代码,或者实际上使用非常奇怪的 shellcode 影响您的 Web 服务器。
使用 PDO 或 MySQLi 之类的东西,准备好的语句首先告诉数据库查询将是什么,然后发送信息,而不是像这样在查询中实际包含它:
$stm = $pdo->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stm->execute(array($_GET['user'], $_GET['password']));
编辑:还有一件事,我认为仍然可以使用 pdo 进行 mysql 注入,但我不知道它是如何工作的,所以我建议做更多的研究,看看你是否能找到任何东西。