gpt4 book ai didi

php - mysql_real_escape_string、stripslashes 和 htmlspecialchars

转载 作者:行者123 更新时间:2023-11-29 01:10:10 33 4
gpt4 key购买 nike

当然,当我向数据库发送一个变量时,我使用mysql_real_escape_string。这样特殊字符就可以进入数据库。

当我从数据库中读取这个变量时,我再次使用 mysql_real_escape_string 和 stripslashes:

$var = stripslashes(mysql_real_escape_string($record['rowname']));

否则它会在引号前给我斜杠。

当我使用上面提到的这个 $var 并想要回显它时,我可以简单地 echo "$var" 因为它已经被剥离和转义了,对吧?

此外,如果我在变量上使用 stripslashes + mysql_real_escape_string,然后在数据库中再次 POST 这个相同的变量,mysql_real_escape_string 就足够了?或者我是否需要再次stripslashes 这个变量?

总结:

据我所知这是如何工作的:

  1. 使用 mysql_real_escape EVERY 使用 mysql 数据时:通过变量读取查询时就像将变量发布到数据库时。
  2. 回显转义变量时使用stripslashes
  3. 如果您想再次将 stripslashes 和转义变量发布到数据库中,则不需要再次对其进行 stripslash。

我是否想念 htmlspecialchars

编辑

所以这都是错的?

    while( $record=mysql_fetch_array($result) ) 
{
$custid=mysql_real_escape_string($record['custid']);
$custsurname=mysql_real_escape_string($record['custsurname']);
$custmidname=mysql_real_escape_string($record['custmidname']);
$custforename=mysql_real_escape_string($record['custforename']);
$custcountry=stripslashes(mysql_real_escape_string($record['custcountry'])); }

最佳答案

恐怕你做错了。关键是转义是上下文敏感的,而您完全忽略了这一事实。

在每种数据格式上,都有一些词或字符在格式规范中被赋予了特殊的含义。例如,' SQL 中的符号表示“字符串定界符”,一个 ? URL 中的符号表示“开始查询字符串”和 < HTML 中的符号表示“开始标记”。当你想插入一个文字单词或字符时,你需要转义,即你想按原样插入它并删除它的特殊含义。

一旦意识到这一点,很明显语法会因格式和上下文而异。 <在 HTML 中表示“开始标记”,但在 SQL 或 URL 中则不是。因此,您需要使用为目标格式构建并遵循格式规则的转义方法。

如果你这样做 mysql_real_escape_string()对于从数据库读取 的数据,您说的是“转义我的数据,以便它可以作为 SQL 字符串内部注入(inject)”。您的数据已准备好在内部用作 SQL 字符串,但已损坏以用于任何其他用途。

在这个例子中,恰好 stripslashes()撤消大部分 mysql_real_escape_string()这样做你最终得到一个基本不变的输出。但那纯属偶然。

最后但同样重要的是,必须一个接一个地转义数据库输入参数是非常烦人的。除了您正在使用的那个之外,所有其他数据库扩展1 都提供准备好的语句。不要受困于不提供现代内容的已弃用扩展。

1 注意:遗留的 mysql 扩展已被弃用多年,当更好的替代品出现时,它不再是语言的一部分。

更新:稍微澄清一下——转义只是一种语法技巧。您不会更改目标引擎眼中的输入,它只会按原样查看原始数据。因此,当您检索输入时,无需取消转义输入。

关于php - mysql_real_escape_string、stripslashes 和 htmlspecialchars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13527785/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com