我几乎已准备好将我的网站转移到我的网络托管服务商,但在此之前,我希望尽可能保护我的网站。我听说过MySQL注入和你可能面临的其他问题,我如何保护我的网站,MySQL数据库和文件?
我要从mysql扩展名改为mysqli或PDO,你推荐哪个?
答案 0 :(得分:2)
我个人使用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注入,但我不知道它是如何工作的所以我建议做更多的研究,看看你是否能找到任何东西。