MySQL sorgusu ile yardımcı

5 Cevap php

Ben bir soru sordum olmuştur ama ben bile bu kadar Bazı biri bana belki bunu cevaplamak için nasıl başlamak vardı bir fikir verebilir cevaplamak için başlatılamıyor

Ben cevap için cevap nasıl sadece bazı öğretim arıyorum değil

buraya:

"Regsister_globals" varsayarsak ve "magic_quotes_gpc" Bu kod parçası ile yanlış nedir, açılır? Olası delikleri Belge, daha sonra (4 Hatalar vardır) güvenli bir versiyonunu üretmek için onları düzeltmek

$p = $_GET["p"];
if ($sp == "index.php") {

     if ($_get["id"] == 345)
          $filter - addslashes($_get["id"]);

     $sql = "SELECT * FROM users WHERE id = {$filter}";
     $row - mydql_fetch_assoc(mysql_query($sql));

     echo <<< HTML
     <html>
           ...... user details .....
     </html>
HTML. 
} else 
      include ($p);

5 Cevap

Bu başlamak gerekir:

Delik 1: register_globals kapalı olmalıdır - bu bir güvenlik felaket.

$p = $_GET["p"];
// Where does $sp come from?
if ($sp == "index.php") {

     // What the hell? So much wrong with these two lines
     // 1. if id == 345 you don't need to addslashes
     // 2. "-" should be "="
     // 3. addslashes should be mysql_real_escape_string
     // 4. the if() should be removed so it runs every time
     if ($_get["id"] == 345)
          $filter - addslashes($_get["id"]);

     // SQL injection
     $sql = "SELECT * FROM users WHERE id = {$filter}";
     // Again with the "-" instead of "="
     // Typo in the function name
     // No error checking
     $row - mydql_fetch_assoc(mysql_query($sql));

     // No escaping of database input - vulnerable to XSS attacks
     echo <<< HTML
     <html>
           ...... user details .....
     </html>
HTML. // Should be ; not .
} else 
{
      // I can include /etc/passwd by manipulating the URL
      include ($p);
}

"SQL enjeksiyon" ve "Giriş doğrulama" için google'da başlamak gerekir.

Çevre göz önüne alındığında,

"Assuming "regsister_globals" and "magic_quotes_gpc" are turned on"

Ben bu durumda size hem bu ayarların riskini öğretmek içindir inanıyoruz.

Snipped kodu aslında yukarıda belirtilen php-direktifleri ile birlikte, "Never trust ANY information originating from outside your script" ile ilgili 4 adet hata var.

(Sadece 4 hatalardan daha yanlış bir şey var; "-" bu olmalı "=" bir çift ve bir alt-durum var "{[(2) "}] Bu harf vb olmalı ama benim tahminim bunlar sadece yazım hataları olmasıdır.)

Kullanıcı verileri kaçmış değil çünkü kod SQL enjeksiyon açıktır. Kullan mysql_real_escape_string

mydql_fetch_assoc mysql_fetch_assoc olmalıdır

Bu deneyin:

<?php
$p = $_GET["p"];
if ($p == "index.php" && $_get["id"] == 345) {

 $filter = mysql_real_escape_string($_get["id"]);

 $sql = "SELECT * FROM users WHERE id = {$filter}";
 $row = mysql_fetch_assoc(mysql_query($sql));

?>
<html>
 ...... user details .....
</html>
<?php
}
else if (strpos($p, '../')===false && file_exists($p)) {
 include $p;
}

?>