我的代码是否可以安全地从SQL注入

时间:2012-01-05 12:08:51

标签: php mysql sql dreamweaver

这是我目前的代码

$search=$_GET["Search"];
$search = addcslashes(mysql_real_escape_string($search), '%_');

此代码由DREAMWEAVER CS4从此处生成

if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

mysql_select_db($database_Echos, $Echos);

查询数据库的SQL Satement

$query_Recordset1 = "SELECT catelogue.ARTIST, catelogue.TITLE, catelogue.`CAT NO.`, catelogue.FORMAT, catelogue.`IMAGE PATH` FROM catelogue WHERE catelogue.TITLE LIKE '%$search%'";

更多Dremweaver代码

 $Recordset1 = mysql_query($query_Recordset1, $Echos) or die(mysql_error());
    $row_Recordset1 = mysql_fetch_assoc($Recordset1);
    $totalRows_Recordset1 = mysql_num_rows($Recordset1);

此后,数据以表格格式显示

我还是新手,最近几天发现你可以将staements放入我的搜索词并破坏8个月的数据库工作。这不像数据库没有备份,但我想安全然后抱歉。

我已经读过准备好的陈述是阻止How can I prevent SQL injection in PHP?的最佳方式。

但正如我所说,我是新手,并且对此并不了解。

So Simple put是DW创建的足够安全的代码

是否应该更改以使其更简单

如果不够安全,我该如何让它更安全?

我在这里使用准备好的装备吗?如果是这样,有人可以在这里解释如何使用它

请提供任何帮助

1 个答案:

答案 0 :(得分:6)

您的代码遭受了许多不良做法,但它并不像我以前常见的PHP代码那样完全不安全或完全不好。

简单来说 - 你不想使用PHP的mysql_函数。你应该做的是使用PDO

mysql_real_escape_string是安全的,但不是100%。有关更好的说明,请参阅解释when mysql_real_escape_string is vulnerable的链接。

那么你要做的是用PDO创建预准备语句然后绑定输入值。 PDO根据使用的字符集和数据库清除它们,这使它100%安全,并且不用担心你是否错过了某些东西。