- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当然,当我向数据库发送一个变量时,我使用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
这个变量?
总结:
据我所知这是如何工作的:
mysql_real_escape
EVERY 使用 mysql 数据时:通过变量读取查询时就像将变量发布到数据库时。stripslashes
。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/
现在我正尝试在有人向数据库提交评论时发出电子邮件通知。我正在使用 mysql_real_escape_string() 来防止注入(inject),并且我试图在电子邮件通知中发送名称、电子邮件和评论时
在我的 MySQL 表中,我得到了评论: "{"out_user":"pb","out_email":"1test@test.de","out_date":"13.04.2015"}" 我使用的代码是
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Using stripslashes after mysql_real_escape_string 我最近一直
人们使用 stripslashes 做什么?它通常与 addslashes 一起使用吗?为什么我应该在用户提交的字符串中去除或添加斜杠? 最佳答案 您应该始终清理用户的输入。但不是 addslashe
我正在测试使用 stripslashes() 的安全性 我尝试了以下方法: $str = chr(0xbf) . chr(0x27); var_dump(stripslashes($str))
在我的代码中,我使用 addslashes 转义某些字符,同时将它们插入数据库,当我发送一些信息时,我使用 stripslashes 删除那些斜杠,情况是 stripslashes 函数删除所有斜杠,
我找到了以下代码,用于检查 stripslashes() 函数是否存在。 if ( function_exists( 'stripslashes' ) ) { // Do something
当我尝试运行此代码时: 输出是Patty O'Furniture,但是当我尝试运行此代码时(将数据上传到数据库表中) 0) { //get the csv file $file =
我正在编写一个 BIG 脚本。 每次在数据库中添加内容时,它都会应用 addslashes(); 问题是,在从数据库中选择数据时,它没有执行 stripslashes(); 此脚本使用基本的 mysq
为什么很多人在字符串上同时使用这两个函数?我看到很多 stripslashes(strip_tags($field));(或相反) strip_tags 是否足以过滤任何 xss 之类的东西? 最佳答
我在使用 PHP/MySQL 转义/剥离字符串时遇到问题 - 似乎总是有多余的斜线。 我们以下面的字符串为例: underline 将字符串添加到数据库时,我使用 mysql_real_escape_
我让我的用户输入文本,然后将它们带到服务器端 php 并处理它们,如果一切顺利,我只需使用 jquery 附加文本,而无需重新加载页面。 这是程序: $post_text = htmlspecialc
我必须转义表单上的一些输入。我使用 mysql_real_escape_string 来转义该值,但它在数据库中添加了很多带值的斜线,原因是我的输入中有一个撇号让我们说 exp。 现在为了去除斜杠,我
我在使用 stripslashes 时遇到问题。我无法将我的 Javascript 代码获取到 json_decode,因为我认为斜线是侵入性的。 这是我所拥有的: $str = stri
我想执行此 mysql 搜索: SELECT ida, MotsClef FROM Actes WHERE MATCH (MotsClef ) AGAINST ('+"dette" +"plège
当然,当我向数据库发送一个变量时,我使用mysql_real_escape_string。这样特殊字符就可以进入数据库。 当我从数据库中读取这个变量时,我再次使用 mysql_real_escape_
我让用户输入一些将存储在 sql 中的信息。当然,我想转义所有引号等......但我也不希望将这些内容输出到最终的 html 中。 我正在为所有 $_POST 变量运行这个函数。有效吗? funct
据我了解,stripslashes 不应从换行符“\n”中删除斜线。当我在变量中有换行符时,一切正常,但情况除外。 $string = '\n\"'; echo stripslashes($strin
有人知道为什么会这样吗? var_dump(json_decode(stripslashes(json_encode(array("O'Reiley"))))); // array(1) { [0]=
假设您有以下内容: 假设您为名为“习惯”的字段输入了值“拔河”。因此,mysqli_real_escape_string 函数将转义第二个引号,数据库引擎将不会误认为该值为“tug o”。相反,它会
我是一名优秀的程序员,十分优秀!