Nasıl SQL Injection bu kodu koruyabilirim?

2 Cevap php

Ben çeşitli kaynaklardan okudum ama benim koduna bunları uygulamak için nasıl emin değilim. Biri bana onunla hızlı bir el verebilir merak ediyordum? Benim kod kere bunu nasıl gösterilmiştir ettik sanırım onu ​​almak mümkün olacak! Ben nedeniyle '% $ QueryString%' falan SQL Injection savunmasız olmak ile ilgisi gördüm ancak bu, ben net üzerinde bulunan bir AJAX otomatik tamamlama geliyor? Herhangi bir Yardım gerçekten takdir!

if ( isset( $_POST['queryString'] ) )
{
  $queryString = $_POST['queryString'];
  if ( strlen( $queryString ) > 0 )
  {
    $query = "SELECT game_title, game_id FROM games WHERE game_title LIKE '%$queryString%' || alt LIKE '%$queryString%' LIMIT 10";
    $result = mysql_query( $query, $db ) or die( "There is an error in database please contact support@laglessfrag.com" );
    while ( $row = mysql_fetch_array( $result ) )
    {
      $game_id = $row['game_id'];
      echo '<li onClick="fill(\'' . $row['game_title'] . '\',' . $game_id . ');">' . $row['game_title'] . '</li>';
    }
  }
}

2 Cevap

Enjeksiyon açığı bunu sterilize olmadan düz bir sorgu içine kullanıcı tarafından sağlanan verileri geçiyoruz olmasıdır. Özel olarak, bu çizgi problemlidir:

$queryString = $_POST['queryString'];  

Eğer işlevi kullanırsanız mysql_real_escape_string() çevresindeki $_POST['queryString'], bu onların kendi kodu eklemek mümkün olmaktan önleyecektir.

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

Sorgu dizeye değerini birleştirerek önce güvenilmeyen kaynaklardan gelen tüm değerler üzerinde mysql_real_escape_string() kullanın. (Sert sorgu dizeye değeri kodu olmasaydı, genel bir kural olarak, bu kaçış). Örneğin:

$queryString = mysql_real_escape_string($_POST['queryString']);
$query =  "SELECT game_title, game_id "
        . "FROM games "
        . "WHERE game_title LIKE '%".$queryString."%'" 
        . "|| alt LIKE '%".$queryString."%' "
        . "LIMIT 10";

Bu çok zor girdiyi unutmadan yapar hazırlanan ifadeleri destekler mysql adaptörü kullanmak genellikle daha kolaydır. Örneğin, PHP sahiptir pdo ya da mysqli