2015-08-02 83 views
5

Mam małą bazę danych MySQL z kilkoma setkami wierszy (wszystko w tekście, bez obrazów). Żądam wszystkich wierszy przy użyciu iQuery i wykonuję wszystkie operacje filtrowania po stronie klienta. Kod iQuery jest następujący:Czy istnieje ryzyko wstrzyknięcia, jeśli dane wprowadzone przez użytkownika nie zostały przesłane do bazy danych?

$(document).ready(function() { 
    $.get("alldata.php", function(data){ 
     $('#result').text(data); 
    }); 
}); 

Po stronie serwera, „alldata.php” ma następujący kod i przekazywać dane w formacie JSON z powrotem do iQuery:

$sql = "SELECT title FROM mydatabase"; 
$result = mysqli_query($conn, $sql); 
$arr = array(); 

while($row = mysqli_fetch_assoc($result)){ 
    $row_array['Title'] =$row['title']; 
    array_push($arr,$row_array); 
} 
mysqli_close($conn); 

echo json_encode($arr); 

Wydaje mi tam nie będzie żadnego ryzyka wstrzyknięcia, ponieważ w bazie danych nie ma danych wprowadzonych przez użytkownika. Mam rację, czy nie? Wielkie dzięki za twój wkład!

+2

Istnieje zapytanie, wybierz. Ale bez udziału użytkownika, złośliwy użytkownik nie może niczego wstrzyknąć. –

+0

Dobra uwaga! Tytuł został odpowiednio zaktualizowany. – LearnAWK

Odpowiedz

7

Masz rację. Twoja instrukcja SQL nie zawiera żadnych parametrów poza samym sobą, więc nie ma wektora do wstrzyknięcia. Podczas gdy ataki przy wtrysku są WYŁĄCZNE w przypadku instrukcji SELECT, w twoim przypadku zapytanie nie jest tworzone dynamicznie, więc nie można nim manipulować.

3

Jesteś bezpieczny, ponieważ nie ma danych wprowadzanych przez użytkownika. Złośliwy użytkownik potrzebuje danych wprowadzanych przez użytkownika w celu wprowadzenia zapytania. Nigdy nie ufaj wprowadzaniu danych przez użytkownika.