addslashes()是否足够安全以避免SQL INJECTIONS?

时间:2014-11-17 05:23:06

标签: php mysql sql-injection

我在页面上接收的所有参数上使用addslashes()。并且还在mysql查询中围绕这些变量应用单个法院。这是我的代码:

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

AND

$queryString            = "SELECT description FROM general WHERE description = '".$string."'"; 
$query                  = mysql_query($queryString);

此代码中是否有SQL INJECTION的可能性?

2 个答案:

答案 0 :(得分:2)

阅读这篇文章:addslashes() Versus mysql_real_escape_string()

摘录:

  

如果我想针对MySQL数据库尝试SQL注入攻击,使用反斜杠转义单引号是一件好事。但是,如果你正在使用addslashes(),我很幸运。我需要做的就是注入类似0xbf27的东西,并且addslashes()将其修改为0xbf5c27,这是一个有效的多字节字符,后跟单引号。换句话说,尽管你逃脱了,我仍然可以成功地注入一个单一的报价。那是因为0xbf5c被解释为单个字符

注意:

  

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:0)

嘿,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';

?>