2011-04-27 76 views
-1
<?php 
    // параметры подключения к базе 
    $server = 'mysql.hoster.ru'; 
    $login = 'usershop'; 
    $password = 'pass'; 
    $database = 'user_shop'; 

    // соединение с базой 
    $conn = mysql_connect($server, $login, $password) or die('Can not connect to SQL server'); 
    mysql_select_db($database); 
    $q = mysql_real_escape_string($_POST['q']); 

    // выбор кодировки сервера 
    mysql_query('SET character_set_database = utf8'); 
    mysql_query('SET NAMES utf8'); 
    // INNER запрос 
    $sql = "SELECT prod.name_ru, prod.Price, pic.thumbnail, prod.slug FROM SC_products prod INNER JOIN SC_product_pictures pic ON prod.default_picture = pic.photoID WHERE prod.name_ru LIKE'%".$q."%' LIMIT 10"; 
    if(isset($_POST['q'])) { 
     $query = mysql_query($sql, $conn); 
     if ($query) { 
      // запрос стоймости валюты 
      $price = mysql_query('SELECT currency_value FROM SC_currency_types WHERE CID = 3', $conn); 
      while ($crow = mysql_fetch_array($price, MYSQL_ASSOC)) { 
       $currency = $crow['currency_value']; 
      } 
?> 
      <?php print '<span class="search">'.$q.'</span><br>'; ?> 
      <table class="listTable"> 
<?php 
      while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) { 
?> 
       <tr> 
        <!-- фото товара --> 
        <td> 
         <div> 
          <a class="searchLink" href="http://www.site.org/product/<?php echo $row['slug']; ?>/"> 
           <img width="80" src="http://www.site.org/published/publicdata/Z114290SHOP/attachments/SC/products_pictures/<?php echo $row['thumbnail'] ?>"> 
          </a> 
         </div> 
        </td> 

        <!-- наименование --> 
        <td> 
         <div> 
          <a class="searchLink" href="http://www.site.org/product/<?php echo $row['slug']; ?>/"> 
          <?php 
           $str = $row['name_ru']; 
           $hstr = str_replace($q, '<span class="hl">'.$q.'</span>', $str); 
           echo $hstr; 
          ?> 
          </a> 
         </div> 
        </td> 

        <td> 
         <div onclick="fill('<?php echo $row['name_ru']; ?>');"> 
          <?php echo '<span class="value">'.round($row['Price']*$currency, 2).'&nbsp;руб.</span>'; ?> 
         </div> 
        </td> 
       </tr> 
<?php 
      } 
?> 
      </table> 
<?php 
     } 
    } else { 
     echo 'Nothing'; 
    } 
    mysql_close($conn); 
?> 

回答

3

儘管我同意teresko說的話,我會回答關於提供的腳本的問題。

合併到SQL語句中的唯一用戶輸入是$ q,它使用正確的函數(mysql_real_escape_string)進行轉義。

如果註冊全局變量被激活,$ q可能意味着兩種不同的東西:$ _POST或者下面聲明的變量。我會將$ q重命名爲$ q2或其他名稱,以清除這種不明確性。

但除此之外,腳本看起來對sql注入是安全的,除非有一個我從來沒有聽說過的新漏洞。

+0

感謝您的評論 – VeroLom 2011-04-27 12:59:15