Quelqu'un a récemment piraté mon CMS PHP et planté une injection SQL. Existe-t-il un moyen de protéger davantage mon code de connexion et d'empêcher les pirates? Toute aide serait géniale, merci.PHP CMS Login Hack
Login Form
<div id="loginform">
<form method="post" action="check-login.php" name="form1">
<label for="username" /><span style="color:#FFFFFF; font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;">username:</span></label>
<input type="text" name="myusername" id="username"/>
<label for="password"/><span style="color:#FFFFFF; font-family:'Trebuchet MS', Arial, Helvetica, sans-serif;">password:</span></label>
<input type="password" name="mypassword" id="password"/>
<label for="submit"></label>
<input type="submit" name="sumbit" value="Login">
</form>
</div>
PHP
mysql_connect ($host, $username, $password) or die ("can't connect");
mysql_select_db ($db_name) or die (mysql_error());
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];
$sql = "SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if ($count == 1){
session_register("myusername");
session_register("mypassword");
header("Location:cms/admin.php");
}else{
echo "Wrong username or password";
}
Qu'est-ce qui vous fait penser que c'était ce script qui était le problème? Quel CMS utilisez-vous? –
Lisez à propos de http://www.php.net/real_mysql_escape_string et appliquez-le ici $ myusername = mysql_real_escape_string ($ _ POST ['myusername']); 'et la même chose pour la ligne suivante du code. – Cheery
Je soupçonne étant donné que ce petit morceau de code n'est pas protégé contre les exploits de base d'injection SQL, le reste de votre code est également non sécurisé. Il est fort probable que vous ayez besoin d'une réécriture complète d'une application, ou simplement d'utiliser un CMS existant et testé, comme Drupal, et de bénéficier d'une infrastructure préconstruite à mi-chemin. – ceejayoz