2013-05-13 4 views
-1

Я хочу сделать эту страницу безопасной, но я не знаю, с чего начать. Потому что вчера меня ввели, я пошатнул строку mysql escaping, но я не очень помог. И я не знаю ничего о PDO, можете ли вы связать меня? Вот код.Параметрированные заявления и безопасность

<?php 
//category.php 

require_once('startsession.php'); 
require_once('php/mysql_prisijungimas.php'); 
include 'connect.php'; 

//first select the category based on $_GET['cat_id'] 
$sql = "SELECT 
      cat_id, 
      cat_name, 
      cat_description 
     FROM 
      categories 
     WHERE 
      cat_id = " . mysql_real_escape_string($dbc, trim($_GET['id'])); 

$result = mysql_query($sql); 

if(!$result) 
{ 
    echo 'The category could not be displayed, please try again later.' . mysql_error(); 
} 
else 
{ 
    if(mysql_num_rows($result) == 0) 
    { 
     echo 'This category does not exist.'; 
    } 
    else 
    { 
     //display category data 
     while($row = mysql_fetch_assoc($result)) 
     { 
      echo '<h2>Topics in &prime;' . $row['cat_name'] . '&prime; category</h2><br />'; 
     } 

     //do a query for the topics 
     $sql = "SELECT 
        topic_id, 
        topic_subject, 
        topic_date, 
        topic_cat 
       FROM 
        topics 
       WHERE 
        topic_cat = " . mysql_real_escape_string($dbc, trim($_GET['id'])); 

     $result = mysql_query($sql); 

     if(!$result) 
     { 
      echo 'The topics could not be displayed, please try again later.'; 
     } 
     else 
     { 
      if(mysql_num_rows($result) == 0) 
      { 
       echo 'There are no topics in this category yet.'; 
      } 
      else 
      { 
       //prepare the table 
       echo '<table border="1"> 
         <tr> 
         <th>Topic</th> 
         <th>Created at</th> 
         </tr>'; 

       while($row = mysql_fetch_assoc($result)) 
       {    
        echo '<tr>'; 
         echo '<td class="leftpart">'; 
          echo '<h3><a href="topic.php?id=' . $row['topic_id'] . '">' . $row['topic_subject'] . '</a><br /><h3>'; 
         echo '</td>'; 
         echo '<td class="rightpart">'; 
          echo date('d-m-Y', strtotime($row['topic_date'])); 
         echo '</td>'; 
        echo '</tr>'; 
       } 
      } 
     } 
    } 
} 
?> 
+0

Ну, это не сработает с расширением MySQL. PDO поддерживает [подготовленные заявления] (http://php.net/manual/en/pdo.prepared-statements.php) –

+0

[Великий эскапизм (или: что вам нужно знать для работы с текстом внутри текста)] (http : //kunststube.net/escapism/) – deceze

ответ

1

В вашем случае окружать mysql_real_escape_string с кавычками, как так:

SELECT * FROM table WHERE ID = '".mysql_real_escape_String($_POST['ID'])."' 

Обратите внимание на дополнительные одиночные кавычки. Это сделает его более безопасным, но тем не менее его лучше использовать подготовленные заявления. Кроме того, предпочитая использовать подготовленные операторы над mysql_query, с php версии 5.5.0 функция mysql_query() будет устаревать.

Есть еще одна тема в stackoverflow, которая задает вопрос «Как предотвратить SQL-инъекцию в PHP Pdo». Вы можете найти несколько примеров и дополнительную информацию: How can I prevent SQL injection in PHP?

+0

Спасибо, за вашу помощь. –

Смежные вопросы