Php addslashes()是否足够安全以避免SQL注入?
我正在页面上接收的所有参数上使用addslashes()。并在mysql查询中对这些变量应用单法庭。这是我的密码: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); 及 这
$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';
?>