2012-09-23 78 views
-2

可能重复:
Best way to prevent SQL injection in PHP?PHP代码,以避免SQL注入

这是我的代码

$user_name = "admin"; 
$password = "123456"; 
$database = "jbit"; 
$server = "localhost"; 
$id = $_POST['id']; 
$db_handle = mysql_connect($server, $user_name, $password); 
$db_found = mysql_select_db($database, $db_handle); 

if ($db_found) { 

$SQL = "SELECT * FROM jbit WHERE htno='$id'"; 
$result = mysql_query($SQL); 
$sum = "SELECT htno, SUM(tm) AS tech, ROUND(SUM(tm)/7.5, 2) AS divi, SUM(credits) AS cred , SUM(CASE WHEN credits <= 0 THEN 1 ELSE 0 END) AS log, 
SUM(CASE WHEN credits > 0 THEN 1 ELSE 0 END) AS pass, SUM(CASE WHEN em >= 0 THEN 1 ELSE 0 END) AS atm, SUM(CASE WHEN em >= -2 THEN 1 ELSE 0 END) AS tot 
FROM jbit WHERE htno='$id'"; 
$result1 = mysql_query($sum); 

请帮我在做这个代码确保安全,这样我可以避免SQL注入

+0

[大逃避现实(或:你需要知道什么工作用文本内文字)](http://kunststube.net/escapism/) – deceze

回答

1

更好的方法将是

  1. mysqli_query()
  2. PDO::query()

您可以通过社区使用了以下功能,但我/我们建议您不要使用功能,因为现在mysql_*了维护和更新。

它只有你的知识只

$id = mysql_prep($_POST['id']); 


function mysql_prep($value) 
{ 
    $magic_quotes_active = get_magic_quotes_gpc(); 
    $new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0 
    if ($new_enough_php) { // PHP v4.3.0 or higher 
     // undo any magic quote effects so mysql_real_escape_string can do the work 
     if ($magic_quotes_active) { 
      $value = stripslashes($value); 
     } 
     $value = mysql_real_escape_string($value); 
    } else { // before PHP v4.3.0 
     // if magic quotes aren't already on then add slashes manually 
     if (!$magic_quotes_active) { 
      $value = addslashes($value); 
     } 
     // if magic quotes are active, then the slashes already exist 
    } 
    return $value ; 
} 

良好的阅读

Best way to prevent SQL injection in PHP?

+4

真的吗?当你在这个时代应该使用准备好的语句时,还是满足PHP <= 4.3.0? – deceze

+0

@deceze它只是OP知识 –

+0

为什么downvote ?? –

-1
$id = mysqli_real_escape_string(($_POST['id'])); 

筛选与mysql_real_escape_sting每个输入。

如果这不起作用,请尝试不推荐使用的替代品mysql_real_escape;

+0

因此,您已经提供了弃用的功能,并且还表示,如果该功能无效,请返回并使用更多弃用的功能。这里有点无语。 – itachi

3

好吧,人们似乎没有投票给你,因为你已经在解决你的问题上没有多少努力。如果您想避免注入攻击,则必须使用prepared statements的mysqli或PDO API。 MySQL API将始终易于注入,这就是为什么不推荐使用。

好像你是在你的应用的早期阶段,因此我建议重构使用更好的API像MySQLiPDO