Php 我的代码不受SQL注入的影响吗
这是我目前的代码Php 我的代码不受SQL注入的影响吗,php,mysql,sql,dreamweaver,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 = "", $theNo
$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);
更多Dremweaver代码
$Recordset1 = mysql_query($query_Recordset1, $Echos) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
在此之后,数据以表格格式显示
我对这一切还是个新手,最近几天我发现你可以在我的搜索词中添加一些信息,然后破坏8个月的数据库工作。这并不是说数据库没有备份,但我宁愿安全,也不愿道歉
我读到一份事先准备好的声明是阻止这种情况的最好办法
但正如我所说,我对这一点还不熟悉,对这一点了解甚少
我的代码非常简单,DW创建的代码非常安全
是否有一些事情需要改变以使其更简单
如果它不够安全,我如何使它更安全
我在这里用备好的木桩吗?如果有的话,有人能在这里解释一下如何使用它吗
如果您能提供任何帮助,我们将不胜感激。您的代码有很多不好的做法,但它并不像我习惯看到的PHP代码那样完全不安全或完全不好 简单地说,您不想使用PHP的
mysql\uuz
函数。你应该做的是使用
mysql\u real\u escape\u string
是安全的,但不是100%。有关更好的解释,请参阅解释的链接
因此,您要做的是使用PDO创建准备好的语句,然后绑定输入值。PDO会根据所使用的字符集和数据库来清理它们,这使它100%安全,而且不必担心是否遗漏了某些内容。您的代码有很多不好的做法,但它并不像我习惯看到的普通PHP代码那样完全不安全或完全不好 简单地说,您不想使用PHP的
mysql\uuz
函数。你应该做的是使用
mysql\u real\u escape\u string
是安全的,但不是100%。有关更好的解释,请参阅解释的链接
因此,您要做的是使用PDO创建准备好的语句,然后绑定输入值。PDO会根据所使用的字符集和数据库来清理这些字符,这使它100%安全,而不必担心是否遗漏了某些内容。因此,简单来说,一个准备好的语句会查看数据库中的所有字符,然后只允许这些字符。准备好的语句是发送到数据库的查询,它的解析和“预编译”方式使您只向db服务器发送参数,并且它知道如何在查询中使用这些参数——因此,它是一次解析,多次使用不同的值。因此,PDO将要做的是检查正在使用的db驱动程序(MySQL、PostgreSQL、MSSQL等)和字符集(UTF8或其他),它将知道如何根据获得的信息处理某些特殊字符。因此,它将正确地清除这些特殊字符,并且它们将“安全”地使用。有了PDO,我必须安装一些东西才能使代码正常工作,或者它已经完成了wamp,我可以只更改我的代码如果你有PHP5.1或更大版本,你有
PDO
。好的,我有5.3.8。因此,我是否必须更改所有代码,或者必须更改多少代码?简单来说,一个准备好的语句查看数据库中的所有字符,然后只允许这些字符。准备好的语句是发送到数据库的查询,它会被解析并“预编译”通过这种方式,您只向db服务器发送参数,而它知道如何在查询中使用它们——因此,它只需解析一次,就可以多次使用不同的值。因此,PDO将要做的是检查正在使用的db驱动程序(MySQL、PostgreSQL、MSSQL等)和字符集(UTF8或其他),它将知道如何根据获得的信息处理某些特殊字符。因此,它将正确地清除这些特殊字符,并且它们将“安全”地使用。有了PDO,我必须安装一些东西才能使代码正常工作,或者它已经完成了wamp,我可以只更改我的代码如果你有PHP5.1或更大版本,你有PDO
。好的,我有5.3.8。那么,我是否必须更改所有代码,或者必须更改多少代码
$Recordset1 = mysql_query($query_Recordset1, $Echos) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);