首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql_real_escape_string(htmlspecialchars())真的有用吗?为什么?

mysql_real_escape_string(htmlspecialchars())真的有用吗?为什么?
EN

Stack Overflow用户
提问于 2011-08-23 17:11:50
回答 5查看 8.3K关注 0票数 1

拥有这样的东西真的有用吗:

代码语言:javascript
复制
$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));

我们为什么要用这个?如何优化?

谢谢

代码语言:javascript
复制
<?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';
}
?>
EN

回答 5

Stack Overflow用户

发布于 2011-08-23 17:16:04

在该代码示例中,它一点用处都没有。

htmlspecialchars将HTML中具有特殊含义的字符转换为实体。如果你有一些文本想要插入到一个超文本标记语言文档中,这是非常重要的(例如,当它停止的时候,像<这样的字符会被视为标签的开始,并且可以防止XSS)。

mysql_real_escape_string将MySQL查询中具有特殊含义的字符转换为转义。这使您可以安全地将任意字符串插入到MySQL数据库中(防止出现错误和injection。然而,better ways to do the same thing是有的。

在本例中,您只是比较两个字符串。通过一堆转换来运行它们不会做任何有用的事情。

票数 6
EN

Stack Overflow用户

发布于 2011-08-23 17:18:01

仅当将不受信任的变量传递给数据库查询时才应使用mysql_real_escape_string($var),如下所示:

代码语言:javascript
复制
$query = mysql_query("SELECT * FROM `foo` WHERE `bar` = '".mysql_real_escape_string($_POST['username'])."'");

这样做对于防范SQL injection attacks非常重要。

至于htmlspecialchars(),当输出不可信的变量到页面时应该使用它,它会去掉任何超文本标记语言,以防止变量在页面顶部输出不想要的或危险的超文本标记语言(例如javascript)。

在您的示例中,这两个函数都不需要,因为您只是比较它们,而不是将它们放入数据库或网页中。

票数 1
EN

Stack Overflow用户

发布于 2011-08-23 17:17:22

像您一样使用htmlspecialchars()是没有意义的,因为对于字符串:

代码语言:javascript
复制
mysql_real_escape_string(htmlspecialchars($_POST['passe'])) == 
    mysql_real_escape_string(htmlspecialchars($_POST['passe2']));

等于:

代码语言:javascript
复制
$_POST['passe'] == $_POST['passe2']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7158668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档