2013-07-29 80 views
0

我是新來的網頁設計,我用一個非常簡單的ajax方法從數據庫中獲取產品的ID。對於後端的新東西來說,如果有新的東西,我想知道是否有人不介意教我一些關於php安全的知識。我的數據庫查詢安全

我的第一個問題是post方法和我得到post方法的數據的方法。

function setupc(upc) { 
    var sku1 = $("#option1 option:selected").data('sku'); 
    var sku2 = $("#option2 option:selected").data('sku'); 
    if (sku2 !== null) { 
     upc = (sku1 + sku2); 
    } else { 
     upc = (sku1); 
    } 
    $('input[name="upc"]').val(upc); 

    $.post('getproduct.php', {upc: upc}, function(data){ 
     $('.result').html(data); 
    }); 
} 

這裏是getproduct.php

<?php 
require_once("config.php"); 

$con=mysql_connect (MySQL, $username, $password); 
if (!$con) { 
    die("Not connected : " . mysql_error()); 
} 
$db = mysql_select_db($database, $con); 
if (!$db) { 
    die ("Can\'t use db : " . mysql_error()); 
} 

$upc = "$_POST[upc]"; 

$sql = "SELECT * FROM products WHERE upc = '$upc'"; 
$result = mysql_query($sql, $con) or die(mysql_error()); 
$row=mysql_fetch_array($result); 
?> 
<input type="hidden" id="id" name="id" value="<? echo $row['id']; ?>"> 
<input type="text" id="price" value="<? echo $row['price']; ?>"> 
<?php mysql_close($con); ?> 

如果這不是要問這類問題的地方,請讓我知道,我會很樂意將其刪除。而且,甚至可能將我指向一個我可以去的地方。

+1

是的,你通過腳本'$ _ POST容易受到SQL注入[「UPC」]'。 – Gumbo

+1

如果您切換到'mysqli'或'pdo'並使用參數化查詢,則許多安全隱患消失。使用mysql_ * api可能很難正確編寫SQL查詢,所以當它被棄用時爲什麼會這麼麻煩。 –

+2

在您編寫任何**更多SQL接口代碼之前,請閱讀[SQL注入漏洞](http://bobby-tables.com/)以及如何[正確地越獄您的值](http:// bobby- tables.com/php)。你應該不**在新的應用程序代碼中使用'mysql_query',它已被棄用並從PHP中刪除。 [PDO不難學](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/),並將提供一些當您遵守使用參數化查詢的規定時,您將受益匪淺。 – tadman

回答

0

您的代碼不會阻止所謂的「SQL注入」

這意味着有人可以調用與在 $ _ POST [「UPC」]參數

SQL語句腳本你查詢會更好使用mysql_real_escape_string:

$sql = "SELECT * FROM products WHERE upc = '" . mysql_real_escape_string($upc) . "'"; 

任何sql代碼都會被轉義並且不會被執行。

編輯:您還可以用google搜索了「SQL注入」一點點,瞭解這個安全事大

+0

感謝您的意見!這是非常有用的,我會用googling注射。我在構建這些東西時聽說過它們,但不知道它是如何完成的。 –