我在页面上接收的所有参数上都使用了addslashes()。并在mysql查询中围绕这些变量应用单个法庭。下面是我的代码:
$string = addslashes($_POST['string']);
$queryString = " INSERT INTO general (description) VALUES ('$string')";
$query = mysql_query($queryString);和
$queryString = "SELECT description FROM general WHERE description = '".$string."'";
$query = mysql_query($queryString);在这段代码中有没有可能出现SQL注入?
发布于 2014-11-17 13:54:31
阅读本文:
摘录:
如果我想尝试对MySQL数据库进行
注入攻击,单引号用反斜杠转义是一件很糟糕的事情。但是,如果您使用addslashes(),我就走运了。我需要做的就是注入类似于0xbf27的东西,addslashes()将其修改为0xbf5c27,这是一个有效的多字节字符,后跟一个单引号。换句话说,尽管您在转义,我仍然可以成功地插入一个引用。这是因为0xbf5c被解释为单个字符
注意:
.它们不再由and are officially deprecated维护。看到了吗?相反,学习,并使用PDO或MySQLi - this article将帮助您决定使用哪种方法。如果您选择PDO,here is a good tutorial。
发布于 2014-11-17 13:58:20
嘿,mysql_connect函数现在已经被弃用了,因为它发出了巨大的警告。但是,如果您坚持使用已弃用的,则必须使用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';
?>https://stackoverflow.com/questions/26966056
复制相似问题