|
20
|
| Michael Borgwardt · 技术社区 · 17 年前 |
|
|
1
19
在处理多字节编码的字符串时,加斜杠通常不够好。 |
|
2
19
它将斜线添加到:
其中addslashes只将slashes添加到
Ilias article 也非常详细地介绍了它的功能 |
|
|
3
5
葛兰素史克严厉的否决回答实际上有点正确。 标准的SQL使用double来转义字面撇号。MySQL使用反斜杠进行转义的非标准设置是默认设置,但它可以被禁用,而且经常被禁用,特别是在SQL_模式的ANSI中。 在这种情况下,只有双重语法才有效,任何使用addslashes(或其他特殊转义方法)的应用程序都将中断。mysql_real_escape_字符串将使用最适合连接SQL_模式的任何转义方法。 如果您仍在使用那些讨厌的东亚编码,这些编码会重复使用较低的128个字符,那么多字节编码问题也很重要,但实际上您希望使用UTF-8。\另一方面,N-escaping并不需要担心,因为MySQL可以完美地处理语句中的原始换行。 |
|
4
4
mysql_real_escape_string
做
更多
比
addslashes操作纯ASCII,而不了解数据库。它逃脱了:
mysql_real_escape_字符串 其目的是“创建可在SQL语句中使用的合法SQL字符串。”mysql_real_escape_string考虑了 连接的当前字符集 (这就是为什么您必须始终传递有效的$mysql对象)。 它执行以下操作(摘自mysql c api文档):
我真的不知道PHP如何在内部存储字符串,但重点是当您使用
|
|
|
5
3
对于MySQL,这意味着:
(来自手册。) |
|
6
2
事实上,大多数时候我们没有。
只要它使用任何单字节字符集或utf8- 使用addslashes()是完全安全的。
它可以保护SQL 字符串文字 以防一些罕见的编码。
但是,它不能自己去做。
必须使用
|
|
|
7
1
我所知道的唯一真正的区别是mysql_real_escape_string()在转义输入字符串时会考虑数据库的字符集。这两个函数都不会转义通配符%和u,它们仍然会使脚本对某些SQL注入开放。 |
|
|
8
1
根据 PHP manual :
|
|
|
9
1
PHP的mysql_real_escape_string函数或多或少, 询问MySQL需要转义哪些字符 ,其中addslashesses函数只在任何单引号(“)、双引号(“)、反斜杠()或nul(空字节)字符前面添加反斜杠。 这两个实际效果是,addslashes在处理多字节字符时往往效果不佳,更重要的是,通过询问MySQL需要转义哪些字符,可以避免将来可能出现的兼容性。使用assslashes有点像将两个特定字符硬编码到转义序列中。 |
|
|
10
0
它应该以其他引用工具所不具备的方式为MySQL转义字符串。 然而,更可取的是 使用mysqli接口 ,并使用参数化的准备查询,而不是尝试确保所有字符串都正确转义。使用参数化查询可以避免这种混乱的字符串工作,并大大降低SQL注入的风险。 编辑:我将澄清一下为什么我考虑引用一个坏主意:很容易忘记何时何地需要引用-变量是字符串还是数字,是否已被引用等等。参数化查询 没有这些问题 报价的必要性是 完全地 排除。 |
|
|
11
0
根据我的理解mysql_real_escape_string()做的更精确,因为它与db通信,首先检查需要编码的内容,然后相应地编码,不是吗?因此,它的工作效率更高 为什么你要先做addslashes,然后在显示数据之前删除这个slashes,但addslashes的效率不如mysql_real_escape_string,如果你使用的是mysql_real_escape_string,就像使用db函数进行查询一样,或者我认为pdo和prepare是更好的方法,因为mysql_real_escape_string是db特有的。 |
|
|
Michael · 某些Windows客户端上的命名管道安全问题 2 年前 |
|
|
adamency · 是否可以从Go二进制文件的源代码中检索字符串? 2 年前 |
|
|
AlboSimo · PayPal Api密钥安全 2 年前 |