PHP: bir dize parametresi kullanarak bir SQL deyiminde Sorunu

3 Cevap php
$befal = mysql_query("SELECT * FROM users WHERE username = $_GET[username]");
$rad = mysql_fetch_assoc($befal);

Eşittir

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\profile.php on line 4

Ben alan adı Admin adında bir kullanıcı var ve hala dont iş. profile.php? user = Yönetici ...

Ama kimliğini kullanmak bu işleri:

$befal = mysql_query("SELECT * FROM users WHERE user_id = $_GET[id]");
$rad = mysql_fetch_assoc($befal);

Ne sorun olabilir?

Teşekkürler

3 Cevap

Bu gibi deneyin:

$befal = mysql_query("SELECT * FROM users WHERE username = '$_GET[username]'");

Sen kesme bir dize parametresi saklanması gerekiyor.

[UPDATE]

Sadece cletus ve Olaf Eğer yukarıdaki sql deyimi ile, işaret gibi very prone to SQL Injection. Ne demek istediğimi görmek için onların yayınlanan cevaplarını kontrol edin.

Errr ... bu hack almak için bir reçete bulunuyor. Ben bu özelliği gibi SQL injection size tanıtmak istiyoruz very funny yet poignant cartoon.

Bunun yerine bu deneyin.

$username = mysql_escape_string($_GET['username']);
$query = mysql_query("SELECT * FROM users WHERE username = '$username'");

Şimdi cevabı var ki, girmeyi deneyin

Something' OR '1' = '1

adı gibi - güzel bir SQL-injectable uygulama üretmek için idare ettik.