Code page php , sql injection? file injection? je ne comprends plus

Chazius Messages postés 2 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 16 avril 2009 - 16 avril 2009 à 16:44
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 - 18 avril 2009 à 13:08
Bonjour a tous
Je m'adresse a vous car je suis dans la detresse.
Cela fait quelques années que je fais des codes php et derniérement je n'arrete pas de subir des attaques sur mon site web.
Je ne trouve pas de solution j'ai eu beau retourner le code compromis dans tous les sens.vu que ce code est le seul formulaire du site.
Aidez moi je vous prie a trouver la faille!
Voici mon code


<?php

// configs
$hostname = "localhost";
$database = "l2jdb";
$user = "root";
$pass = "";


if(isset($_POST['login']) && isset($_POST['passold']) && isset($_POST['char']) && strlen($_POST['login']) <= 16 && strlen($_POST['passold']) <= 16 && strlen($_POST['char']) <= 16) {
$connect = mysql_connect($hostname, $user, $pass);
mysql_select_db($database, $connect);

$logincheck = mysql_real_escape_string($_POST['login']);

$checkaccount mysql_query("SELECT login FROM accounts WHERE login '$logincheck'");

$checkexist = mysql_num_rows($checkaccount);


if($checkexist==0)
{
echo 'Veuillez bien verifier vos informations (1).

';//erreur nom de compte
}

else {
function l2j_encrypt($password)
{
return base64_encode(pack("H*", sha1(utf8_encode($password))));
}
$login = mysql_real_escape_string($_POST['login']);
$passwold = mysql_real_escape_string($_POST['passold']);

$char = mysql_real_escape_string($_POST['char']);
$passwold = l2j_encrypt($passwold);
$checkpass mysql_query("SELECT password FROM accounts WHERE login '$login'");



while(list($passcorrect)=mysql_fetch_row($checkpass)) {
if($passwold!=$passcorrect) {
echo 'Veuillez verifier vos informations (2)

';//erreur mot passe
}
else {

$descnew = "<html><title>Description Personnage</title> ".mysql_real_escape_string($_POST['descnew'])." </html>";

mysql_query("UPDATE characters SET char_desc '$descnew' WHERE char_name '$char'");

}
}
}
} elseif (isset($_POST['submit'])) {
echo 'Vous n\'avez pas rempli tous les champs

';
} else {
echo 'Repmplissez le formulaire avant de changer de description.

';
}

if (isset($connect))
{
mysql_close($connect);
}

?>

<center><form action=\"\" method=\"POST\">----
, Changement de description, ----
Login:, , ----
Mot de Passe:, , ----
Personnage:, , ----
Description:, <textarea name="descnew" type="textarea" rows="10" maxlength="450" id="memoria" cols="40"></textarea>, ----
, ----
, , </form>
</center>
A voir également:

4 réponses

Chazius Messages postés 2 Date d'inscription samedi 16 février 2008 Statut Membre Dernière intervention 16 avril 2009
16 avril 2009 à 16:54
je ne trouve pas le bouton editer sur ce forum.....
0
lefter Messages postés 63 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 16 mai 2009
16 avril 2009 à 17:54
Pourtant il me parait plus que correct....



$login = mysql_real_escape_string($_POST['login']);

$passwold =
mysql_real_escape_string($_POST['passold']);

$char =
mysql_real_escape_string($_POST['char']);

$passwold =
l2j_encrypt($passwold);

$checkpass = mysql_query($sql="SELECT login,password FROM
accounts WHERE MD5(login) = '".md5($login)."' and MD5(password)='".md5($passwold)."'");

mysql_query("INSERT INTO save_sql(sql,date) VALUES ('$sql',NOW())");
// As tu pensez à sauvegarde les requêtes faites par les utilisateurs de ton site ?


while(list($logincorrect,$passcorrect) =mysql_fetch_row($checkpass)) {
if(($passwold!=$passcorrect)||($logincorrect!=$login)) {

    echo 'Veuillez verifier vos informations
(2)';
    //erreur de login ou de mot passe

} else {
    $descnew =
"".mysql_real_escape_string($_POST['descnew'])."";   

    mysql_query("UPDATE
characters SET char_desc '$descnew' WHERE char_name '$char'");

}

ça parait un peu bête mais as tu pensais à changer ton mot de passe ???
Un mot de passe qui ne soit pas trop simple etc ...etc ....

Lefter 
0
lefter Messages postés 63 Date d'inscription lundi 7 juin 2004 Statut Membre Dernière intervention 16 mai 2009
16 avril 2009 à 18:01
Désolé une erreur s'est glissé:
mysql_query("INSERT INTO save_sql(sql,date) VALUES ('$sql',NOW())");
// date est un nom réserver

à remplacer par :
mysql_query("INSERT INTO save_sql(sql,datesql) VALUES ('$sql',NOW())");

Pensez à créer la table
CREATETABLE`save_sql`(
`sql`VARCHAR(255)NOTNULL,
`datesql`DATETIMENOTNULL
);

Lefter
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
18 avril 2009 à 13:08
Hello,

si tu décrivais ces attaques, qu'on y voit plus clair ?
0
Rejoignez-nous