当前位置:  开发笔记 > 编程语言 > 正文

mysql_real_escape_string()做了什么,addslashes()没有?

如何解决《mysql_real_escape_string()做了什么,addslashes()没有?》经验,为你挑选了3个好方法。

为什么我们需要特定于数据库的函数,如mysql_real_escape_string()?它能做什么,addslashes()不是吗?

暂时忽略参数化查询的优越替代方案,是一个使用addslashes()的webapp,它仍然容易受到SQL注入的攻击,如果是,如何?



1> Ólafur Waage..:

它添加了斜杠:

\x00, \n, \r, \, ', " and \x1a. characters.

addslashes只添加斜杠

' \ and NUL

伊利亚斯的文章也非常详细地介绍了它的功能



2> Chris KL..:

在处理多字节编码字符串时,Addslashes通常不够好.


任何具有以0x5c结尾的有效多字节字符的编码都可以通过`addslashes()`潜行引号.Chris Shiflett在使用GBK的博客上有一个很好的例子.http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

3> bobince..:

gs苛刻的低调回答实际上是对的.

标准SQL使用加倍来逃避文字撇号.MySQL的非标准反斜杠用于转义是默认设置,但它可以被禁用,通常是,特别是在sql_mode ANSI中.

在这种情况下,只有doubled语法才能工作,并且您使用addslashes(或其他ad-hoc转义方法)的任何应用程序都将中断.mysql_real_escape_string将使用最适合连接的sql_mode的转义方法.

如果您仍在使用那些重复使用较低128个字符的令人讨厌的东亚编码,那么多字节编码问题也很重要,但实际上您想要使用UTF-8.另一方面,由于MySQL可以完全愉快地处理声明中的原始换行符,因此无需担心.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有