有这样的东西真的很有用:
$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
为什么我们使用这个? 如何优化它?
谢谢
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("nom_db");
$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
$passe2 = mysql_real_escape_string(htmlspecialchars($_POST['passe2']));
if($passe == $passe2)
{
script here
}
else
{
echo 'Your password is wrong';
}
?>
答案 0 :(得分:6)
在该代码示例中,它根本没用。
htmlspecialchars
将HTML中具有特殊含义的字符转换为实体。如果您要将某些文本插入到HTML文档中(因为它会停止,例如<
等字符被视为标记的开头,并且防止XSS),这一点非常重要
mysql_real_escape_string
将MySQL SQL查询中具有特殊含义的字符转换为转义符。这允许您安全地将任意字符串插入MySQL数据库(防止错误和injection。但是,better ways to do the same thing。
在这种情况下,您只是比较两个字符串。通过一系列转换来运行它们不会有任何用处。
答案 1 :(得分:1)
在将不受信任的变量传递给数据库查询时,您应该只使用mysql_real_escape_string($var)
,如下所示:
$query = mysql_query("SELECT * FROM `foo` WHERE `bar` = '".mysql_real_escape_string($_POST['username'])."'");
这样做很重要,以防范SQL injection attacks。
对于htmlspecialchars()
,当输出不可信变量到页面时,应该使用它,它将删除任何HTML以防止变量在页面顶部输出不需要的或危险的HTML(javascript例如)。
在您的示例中,您既不需要功能,也不需要比较它们,也不会将它们放在数据库或网页上。
答案 2 :(得分:0)
像你一样使用htmlspecialchars()
毫无意义,因为对于字符串:
mysql_real_escape_string(htmlspecialchars($_POST['passe'])) ==
mysql_real_escape_string(htmlspecialchars($_POST['passe2']));
与...相同:
$_POST['passe'] == $_POST['passe2']
答案 3 :(得分:0)
使用htmlspecialchars可以保护您免受xss的攻击,但是有旁路方法 如果你要将这个词添加到url
像
`链接名称';
绕过将使用javascript onmouseout onhover else这需要关闭magic_qutoes
addslashes&amp; mysql_real_escape_string保护免受sql注入
忽略'
或"
引号
但是以小写字母
后删除这些单词的好方法平均 $ username = strtolower($ _ GET ['ser']); if(preg_match(“(select | and |或| union | into | from | information | schema | .user | concat | group)\”,$ username)){ 死(“错误:黑客入侵”); }
答案 4 :(得分:0)
pastebin中的完整代码显示变量稍后用于数据库查询。
mysql_query("INSERT INTO validation VALUES('', '$pseudo', '$passe', '$email')");
mysql_real_escape_string()
在这里必须; htmlspecialchars
不是,因为@Quentin在上面解释得非常好。
如果您插入的内容在HTML页面上输出,请在输出中稍后使用htmlspecialchars
。