php输入测试/mysql\u real\u escape\u字符串/pdo
我正在开发一个应用程序,需要通过表单将一些数据发送到db。 我已经开发了一个输入测试类,用于获得干净的输入。 这是我的代码:php输入测试/mysql\u real\u escape\u字符串/pdo,php,mysql,validation,pdo,Php,Mysql,Validation,Pdo,我正在开发一个应用程序,需要通过表单将一些数据发送到db。 我已经开发了一个输入测试类,用于获得干净的输入。 这是我的代码: class test { public static function inputTest($inputPar) { $con=mysqli_connect("localhost","****","*****","*******"); // Check connection if (mysqli_conn
class test
{
public static function inputTest($inputPar)
{
$con=mysqli_connect("localhost","****","*****","*******");
// Check connection
if (mysqli_connect_errno()) {
return "Failed to connect to MySQL: " . mysqli_connect_error();
}
$text=htmlspecialchars($inputPar);
$text0=trim($text);
$text1=stripcslashes($text0);
$text2= strip_tags($text1);
$text3 = str_replace("’","'", $text2);
$text4=mysql_real_escape_string($text3);
mysqli_close($con);
return $text4;
}
}
当我尝试使用它时,除了最后一个$text4=mysql\u real\u escape\u字符串($text3),其他一切都正常代码>
每次都会给我回一个空字符串
我刚刚将所有应用程序转换为新的PDO驱动程序(不要介意这个类中的mysqli驱动程序,这只是一个使其工作的快速示例),我了解到一些控制现在是不必要的。所以我要问的是,为了获得良好的安全性,哪种控制仍然是强制性的
Php版本是5.5.9。不能将ext/mysql函数与ext/mysqli连接一起使用。连接和转义都必须使用一个或另一个
等效的PDO方法是,但请注意,这会在字符串的每一端添加单引号,这与较早的mysql扩展的转义字符串函数不同
所有这些都是没有意义的,因为如果您使用准备好的语句并使用查询参数将变量添加到查询中,则无需清理输入。事实上,如果将字符串作为查询参数传递,则不能对其进行转义,因为会将文本反斜杠插入数据库中不需要它们的位置
这里有很多好的例子和讨论:
您正在使用的所有其他“清理”功能也是不必要的,至少出于SQL注入防御的目的。这些功能并不是简单的“使其更安全”,而是累积效应。它们都有特定的用途,简单地将它们一起使用是幼稚的
这就像你有一个木工项目,你在同一个表面上涂上水封、染色、透明涂层和三种颜色的油漆。每一个单独使用都很好,但将它们全部使用表明您不知道它们的用途
您可能喜欢查看我的演示文稿,或者看我把演示文稿提交给旧金山MySQL用户组:或者我为PelCONA录制的免费网络研讨会:
记录每个变量并告诉我们输出。如果要使用PDO,则不需要mysql_real_escape_字符串。不,仅出于测试目的使用mysql_是不好的,因为坏习惯往往是建立在坏习惯上的。输入字符串是$input=“sjkaksdk”;输出为:text:sjkaksdk text0:sjkaksdk text1:sjkaksdk text2:sjkaksdk text3:sjkaksdk text4:(text4只是一个空字符串)我在PHP版本5.4.34上得到了相同的语句,在5.5.15“安全性”上一切正常。你在保护什么?非常感谢我会检查所有的链接,看看我的知识是否增加!