Autor Zpráva
jquery
Profil *
Ahoj,
niekto sa mi hackol do databázy a naozaj netuším ako :(
mám registráciu cez jquery ajax()
druhe=0;
$("#password").change(function() { 
var password = $("#password").val();
if(password.length >= 5 && password.length < 16 )
{
    $("#a").html('ok');
        druhe=1;
}
});
$('#button').click(function() {
if (druhe != 1){
  alert('niečo nie je splnené!');
}
if (druhe == 1){
var heslo = $("#password").val();
     $.ajax({  
    type: "POST",  
    url: "check.php",  
    data: "heslo="+heslo,
    success: function(msge){  
   $("#obsah").ajaxComplete(function(event, request, settings){ 
    if(msge == 'OK')
    {
$("#obsah").html('ok registrácia úspešná');
var druhe=0;
    } 
   });

 } 
  });
}
});
subor check.php:
<?php
header("Content-Type: text/html; charset=utf-8");
session_start();
$dbHost = '';
$dbUsername = '';
$dbPassword = '';
$dbDatabase = '';
$db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die ("Nepodarilo sa spojiť zo serverom.");
mysql_select_db ($dbDatabase, $db) or die ("Spojenie s databázou nefunguje.");
if(isset($_POST['heslo']))
{
$heslo = $_POST['heslo'];
$jeaaa = mysql_query("select nieco from uzivatelia order by id desc limit 1"); $joaaa = mysql_fetch_assoc ($jeaaa); $idd=$joaaa['nieco'];                    
mysql_query ("insert into uzivatelia (heslo) values ('$heslo')");
mysql_close($db);  
echo 'OK';
}
?>

Robím niečo zle? Kde môže byť chyba? Ako sa mi niekto dokázal dostať do databázy a zmeniť v nej pár vecí?
vopred ďakujem
Someone
Profil
nikde tam nevidím mysql_real_escape_string()
Radek9
Profil
jquery:
Na řádku 12 v PHP neošetřuješ vstup. Dalo by se to vyřešit např. funkcí MySQL_real_escape_string.
jquery
Profil *
a to je k čomu?


a to už by stačilo a nedostane sa mi tam nikto? A môžete mi prosím vysvetliť na čo presne slúži tá funkcia. ďakujem
Radek9
Profil
jquery:
kdybych do tvého vstupního políčka nebo někam napsal něco takového: (To je asi zrovna blbě, ale ten řetězec se tak zkonstruovat dá.)
'); DELETE FROM uzivatelia; ('
Tak ti to mázne celý obsah tabulky. Potřebuejš escapovat apostrofy.
Someone
Profil
jquery:
a to je k čomu?
Escapuje to znaky typu " ' takže vznikne -> \" \'
_es
Profil
jquery:
to je k čomu?
http://www.justit.cz/wordpress/2011/04/01/sql-injection-utok-uspel-az-na-stovkach-tisic-adres/
http://cs.wikipedia.org/wiki/SQL_injection
jquery
Profil *
aha už som tomu pochopil ďakujem.
malo by to vypadať takto?
$jeaaa = mysql_query("select nieco from uzivatelia order by id desc limit 1"); $joaaa = mysql_fetch_assoc ($jeaaa); $idd = $joaaa['nieco'];   
$idd = mysql_real_escape_string($idd);  
alebo?
Someone
Profil
Ne, [#8] ošetruješ výstup z DB musíš ošetřit vstup. Takže když se uživatel přihlašuje(nebo cokoliv jiného) tak to musíš ošetřit.
mysql_query("SELECT id FROM uzivatele WHERE uzivatele.jmeno='".mysql_real_escape_string($_POST['prihlasovaci_jmeno'])."' AND uzivatele.heslo='".mysql_real_escape_string($_POST['prihlasovaci_heslo'])."'");
jquery
Profil *
aha, čiže to treba spraviť iba keď berem niečo z databázy z $_POST[nieco']?
lebo to v [#8] berem z databázy len posledné id vid:
$jeaaa = mysql_query("select id from uzivatelia order by id desc limit 1"); $joaaa = mysql_fetch_assoc ($jeaaa); $idd = $joaaa['id'];
a tam to treba teda neni?


a nebolo by dobré spraviť aj toto:
$heslo =mysql_real_escape_string($_POST['heslo']);
len kvôli ukladaniu hesla do databázy?
Someone
Profil
Třeba je to tam, kde figuruje SQL příkaz, do kterého má možnost zasáhnout uživatel. Přihlašování, registrace, prostě všude kde jsou inputy a na základě jejich obsahu stavíte SQL příkaz. To znamená, že $jeaaa = mysql_query("select id from uzivatelia order by id desc limit 1"); $joaaa = mysql_fetch_assoc ($jeaaa); $idd = $joaaa['id']; -> toto, kde vybíráte ID posledně registrovaného uživatele. Tam se nic escapovat nemusí.

jquery:
a nebolo by dobré spraviť aj toto:
to by bylo dobré.
jquery
Profil *
aha ďakujem veľmi pekne za pomoc.
teda takto môže byť keď kontrolujem email áno?
$email=mysql_real_escape_string($_POST['email']);
$sql = mysql_query ("SELECT * FROM uzivatelia where email='$email'");
Someone
Profil
jquery:
takto môže byť keď kontrolujem email áno?
Ano
jquery
Profil *
dobre ešte raz ďakujem.


ešte jedna otázka keď mám v session uložený email a vyberám dáta z db podľa tej session tak tam to nemusí asi byť že?


Someone:
a napísal som vám email budem rád ak si ho prečítate

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: