2014-02-25 2 views
-2

이 코드에서 SQL 주입을 방지하는 좋은 방법을 알고 있다면 궁금합니다. 내가 원하는 마지막 것은 누군가 내 데이터베이스를 해킹하는 것입니다. 나는 이것에 상당히 새롭고 전문가 의견을 듣고 싶다. 감사. 당신이 그렇게 항상 @ 지적으로 준비된 문을 사용하여 사용자로부터 데이터를 가져 오는됨에 따라 모든이 코드에서 SQL 주입 메서드를 방지하십시오.

<?php 
    $input = $_GET['input'];//Note to self $input in the name of the search feild 
    $terms = explode(" ", $input); 
    $query = "SELECT * FROM content WHERE "; 

    foreach ($terms as $each){ 
     $i++; 
     if ($i == 1) 
      $query .= "keywords LIKE '%$each%' "; 
     else 
      $query .= "OR keywords LIKE '%$each%' "; 
    } 

    // connecting to our mysql database 
    mysql_connect("localhost", "username", "password"); 
    mysql_select_db("database"); 

    $query = mysql_query($query); 
    $numrows = mysql_num_rows($query); 

      if ($numrows > 0){ 
       $i = 0; 
          while ($row = mysql_fetch_assoc($query)){ 
           $i++; 

      $id = $row['id']; 
      $title = $row['title']; 
      $description = $row['description']; 
      $keywords = $row['keywords']; 
      $link = $row['link']; 
      $plink = $row ['plink']; 
      $views = $row ['views']; 

       if($i == 3){ 
      echo '<td valign="top" "width="248" height="100%"> 
      <table width="100%" border="0"> 
      <tr> 
       <td align="center" valign="top"><a href='.$link.'> 
       <img src='.$plink.'width="200" height="151" vspace="5" /> 
      <br><b><a href='.$link.'>'.$title.'</b></a> 
       <br><strong><span style="line-height:20px">Total views: '.$views.'</span></strong> 
       </td> 
        </tr> 
       </table> 
       </td><tr>'; 



      } 


      else{ 

      echo '<td valign="top" "width="248" height="100%"> 
      <table width="100%" border="0"> 
      <tr> 
       <td align="center" valign="top"><a href='.$link.'> 
       <img src='.$plink.'width="200" height="151" vspace="5" /> 
      <br><b><a href='.$link.'>'.$title.'</b></a> 
       <br><strong><span style="line-height:20px">Total views: '.$views.'</span></strong> 
       </td> 
        </tr> 
       </table>' 
          ; 

       } 
        } 


     } 





    else 
     echo "No results found for \"<b>$input</b>\""; 



    // disconnect 
    mysql_close(); 
?> 
+3

[** 새로운 코드에서 사용하지 마십시오'mysql_로 *'기능 **] (http://bit.ly/phpmsql). 그들은 더 이상 유지되지 않으며 [공식적으로 사용되지 않습니다] (http://j.mp/XqV7Lp). [** 빨간색 상자 **] (http://j.mp/Te9zIL)를 참조하십시오. 대신 [* prepared statements *] (http://j.mp/T9hLWi)에 대해 알아보고 [PDO] (http://php.net/pdo) 또는 [MySQLi] (http://php.net/)를 사용하십시오. mysqli) - [이 기사] (http://j.mp/QEx8IB)는 어떤 결정을 내리는 데 도움이 될 것입니다. PDO를 선택하면 [여기는 좋은 튜토리얼입니다] (http://j.mp/PoWehJ). –

+0

여기를 확인 http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 – krishna

+0

[parametrerized]와 함께 PDO를 사용하십시오 (http://stackoverflow.com/). questions/60174/how-can-i-prevent-sql-injection-in-php? rq = 1) 쿼리를 사용하십시오. – Rikesh

답변

0
  1. 먼저, * mysql_로를 사용하여 mysql_query,로 mysql_connect 등

  2. 사용 mysqli 또는 PDO 같은 기능이 donot 나는 Cheezburger를 가질 수있다.

문서는 링크 : http://php.net/manual/en/book.pdo.php

당신은 mysql_로 *이 기능은 다음는 mysql_real_escape_string와 htmlentities()에서를 사용하는 사용하는 계속합니다.

그러나 Prepared 문을 사용하여 mysqli 또는 PDO로 전환하는 것이 좋습니다.

자습서 : http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059