Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php addslashes()是否足够安全以避免SQL注入?_Php_Mysql_Sql Injection - Fatal编程技术网

Php addslashes()是否足够安全以避免SQL注入?

Php addslashes()是否足够安全以避免SQL注入?,php,mysql,sql-injection,Php,Mysql,Sql Injection,我正在页面上接收的所有参数上使用addslashes()。并在mysql查询中对这些变量应用单法庭。这是我的密码: $string = addslashes($_POST['string']); $queryString = " INSERT INTO general (description) VALUES ('$string')"; $query = mysql_query($queryString); 及 这

我正在页面上接收的所有参数上使用addslashes()。并在mysql查询中对这些变量应用单法庭。这是我的密码:

$string             = addslashes($_POST['string']);
$queryString            = " INSERT INTO general (description) VALUES ('$string')";
$query                  = mysql_query($queryString);

这段代码中有SQL注入的可能吗?

阅读本文:

摘录:

如果我想尝试对MySQL数据库进行SQL注入攻击,那么使用反斜杠转义单引号是一个麻烦。但是,如果您使用的是addslashes(),那么我很幸运。我所需要做的就是注入类似0xbf27的内容,addslashes()将其修改为0xbf5c27,一个有效的多字节字符,后跟一个引号。换句话说,我可以成功地注入一个引用,尽管你逃跑了。这是因为0xbf5c被解释为单个字符

注意:

。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO


嘿,mysql_connect函数现在被弃用为PHP gaint sign警告。 但是,如果您坚持使用不推荐的,那么您必须清理所有变量 使用mysql_real_escape_string()函数,并将其传递给strip_tags()函数

但为什么不通过预先准备好的声明更好地使用Mysqli,或者更好地使用我认为最好的PDO呢。 Mysqli和PDO进行自动数据清理,确保SQL注入攻击不可能发生

如果你准备好加入PDO,那么我可以帮助你开始。我希望这有帮助

PDO连接

<?php

$db = new PDO (

    'mysql:host=localhost;dbname=sectona_db;charset=utf8', 

    'root', // username



    'root99' // password

);

?>




<?php



require("pdo.php"); 



$username = $_POST['useruname'];
$photo = $_POST['photo'];


$statement = $db->prepare('INSERT INTO users (username,photo)
                          values
                                                   (:username,:photo)');

$statement->execute(array( 

':username' => $name,
':photo' => 'profile.png'


));
echo ' data submitted';

?>


使用PDO。mysql命令现在已经贬值,整个系统是建立在mysql之上的。我现在不能使用PDO,因为您的系统是基于php和mysql构建的。PDO是PHP中一种新的编码版本或样式,是的,我知道PDO,但攻击者是否有可能绕过此安全性?
并将其传递给strip_tags()
不,不要这样做为什么strip_tag()?如果用户需要去除危险的html元素该怎么办。我相信这仅仅是用户想要对表单输入的数据做什么的一个函数,trip_标签会破坏html并使其变得无用。如果您想要保护免受XSS攻击,您需要逃避可能的恶意代码,并且只在html页面上输出时进行;这与SQL注入无关,因为maliciosus javascript对DB没有任何影响。使用stip_标签的建议是那些清理不时弹出的所有东西的功能的一种变体,而这些功能对安全性几乎没有任何影响。根据字符串的目的地,您可以逃逸。我重复一遍,不要对sql注入使用strip_tags(),请不要误解我的意思,我没有对sql注入使用strip_tags()。一点也不。明白。感谢拥有
default character set=GBK
是真的,但是在UTF-8中?@ringø你找到了吗?@undefined@ringø是的,我看到了,很遗憾。(谢谢)@undefined不客气,但为什么“难过”?
<?php

$db = new PDO (

    'mysql:host=localhost;dbname=sectona_db;charset=utf8', 

    'root', // username



    'root99' // password

);

?>




<?php



require("pdo.php"); 



$username = $_POST['useruname'];
$photo = $_POST['photo'];


$statement = $db->prepare('INSERT INTO users (username,photo)
                          values
                                                   (:username,:photo)');

$statement->execute(array( 

':username' => $name,
':photo' => 'profile.png'


));
echo ' data submitted';

?>