2013-05-16 44 views
1

我有這一塊PHP的,我只是想確保它是從SQL注入和安全漏洞的安全:PHP和SQL注入

<?php 
require_once "./source/includes/data.php"; 
header('Content-type: application/json'); 
$request = mysql_real_escape_string($_REQUEST['email_address']); 

$query = mysql_query("SELECT * FROM mmh_user_info WHERE email_address ='$request'"); 
$result = mysql_num_rows($query); 
if ($result == 0){ 
$valid = 'true';} 
else{ 
$valid = 'false'; 
} 
echo $valid; 
?> 

我還是一個PHP新手,任何增強或修改將大大不勝感激!

+3

從注射非常安全,但如果你正在編寫新代碼,爲什麼不用PDO或mysqli準備的語句?儘可能安全.. – Wrikken

+0

您的WHERE子句中的'$ email_address'可能應該是'$ request'。除此之外,安全。 – Shi

+0

你可以建議對此代碼進行編輯嗎?或者建議一個教程,解釋如何在mysqli準備的語句中做到這一點?謝謝你的建議! – MacLover

回答

4

我建議你使用PDO的這正在成爲PHP5標準:

$sth = $dbh->prepare("SELECT * FROM mmh_user_info WHERE email_address = ?"); 
$sth->execute(array($_REQUEST['email_address'])); 
$red = $sth->fetchAll(); 
+0

這裏需要額外的'isset'檢查 – zerkms

+4

不應該在'execute()'裏面有'array()'@zerkms – samayo

+0

@php NoOb:這也是,但這不是我的答案:-) – zerkms

1

我會用$ _POST而不是$ _REQUEST由用戶Pascal MARTINthis great answer注意幾點:

$_REQUEST默認情況下包含$_GET,$_POST$_COOKIE的內容。

但這只是一個默認值,取決於variables_order;並不確定你想使用cookie。

如果讓我選擇,我可能不會使用$_REQUEST$_GET$_POST我會選擇 - 這取決於我的應用程序應該做的事情(即一個或另一個,但不能同時):一般說:

  • 你應該當有人從您的應用程序請求數據使用$_GET
  • 而當有人推送(插入或更新;或刪除)數據您應用程序時,您應該使用$_POST

無論哪種方式,都不會有太大的關於表演的區別:區別可以忽略不計,對比一下你的腳本的其餘部分將做。