求mysql_real_escape_string()防注入详解
mysql_real_escape_string()被视为替代addslashes()和mysql_escape_string()的好方法,可以解决宽字节和注入问题,不过官方对其的描述却说的不清不楚:
mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
这句真没懂,考虑到连接的当前字符集啥意思,请高手详细讲讲,谢谢!
参考:
http://php.net/manual/zh/function.mysql-real-escape-string.php
http://www.cnblogs.com/suihui/archive/2012/09/20/2694751.html
http://www.neatstudio.com/show-963-1.shtml
补充问题: @演演演演
1.加的\并不会传入mysql中,那么如果注入了' or 1=1;-- s
,这里的注入内容最终还不是传到mysql去了执行了吗?
参照:https://segmentfault.com/q/1010000005994443
2.并考虑到连接的当前字符集
啥意思呢? 改变当前连接的字符集?
回复内容:
mysql_real_escape_string()被视为替代addslashes()和mysql_escape_string()的好方法,可以解决宽字节和注入问题,不过官方对其的描述却说的不清不楚:
mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
这句真没懂,考虑到连接的当前字符集啥意思,请高手详细讲讲,谢谢!
参考:
http://php.net/manual/zh/function.mysql-real-escape-string.php
http://www.cnblogs.com/suihui/archive/2012/09/20/2694751.html
http://www.neatstudio.com/show-963-1.shtml
补充问题: @演演演演
1.加的\并不会传入mysql中,那么如果注入了' or 1=1;-- s
,这里的注入内容最终还不是传到mysql去了执行了吗?
参照:https://segmentfault.com/q/1010000005994443
2.并考虑到连接的当前字符集
啥意思呢? 改变当前连接的字符集?
这个说的就是mysql gbk双字节注入
比如用户登录 假设你的sql语句:$sql = "select * from user where user_name='$username' and password='$password'";
1 如果存在注入点 并且也没有转义。传递参数username=' or 1=1;-- s 那么此时的sql语句就是
$sql = "select * from user where user_name='' or 1=1;-- s ' and password='$password'";
因为--是注释符 所以后面不用判断成功绕过
2 如果存在注入点 并且使用了特殊字符转义。那么此时的sql语句就是
$sql = "select * from user where user_name='\' or 1=1;-- s ' and password='$password'";
无法绕过
3 这个时候问题来了,牛逼的黑客发现了gbk编码时存在宽字节注入。这个时候传递username=%df%27 or 1=1;--
这个时候执行的sql语句变成了:
$sql = "select * from user where user_name='運' or 1=1;-- s ' and password='$password'";
成功绕过
如何解决这个问题
mysql_real_escape_string — 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
mysql_real_escape_string
方法对SQL
语句的转义机制,随着当前数据库连接的字符集的改变而改变。相同的SQL
语句,不同的字符集下,转义后的结果不一定相同。
重要:
mysql_real_escape_string
方法属于mysql
扩展,该扩展自PHP
版本5.5.0
之后已被标记为过时,并在PHP
版本7
之后被移除。请使用mysqli
或者PDO
扩展进行数据库操作。数据库字符集请尽量使用utf8
或者utf8mb4
(更好)。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MySQL和phpMyAdmin可以通过以下步骤进行有效管理:1.创建和删除数据库:在phpMyAdmin中点击几下即可完成。2.管理表:可以创建表、修改结构、添加索引。3.数据操作:支持插入、更新、删除数据和执行SQL查询。4.导入导出数据:支持SQL、CSV、XML等格式。5.优化和监控:使用OPTIMIZETABLE命令优化表,并利用查询分析器和监控工具解决性能问题。

session_start()iscucialinphpformanagingusersessions.1)ItInitiateSanewsessionifnoneexists,2)resumesanexistingsessions,and3)setsasesessionCookieforContinuityActinuityAccontinuityAcconActInityAcconActInityAcconAccRequests,EnablingApplicationsApplicationsLikeUseAppericationLikeUseAthenticationalticationaltication and PersersonalizedContentent。

在MySQL中,添加字段使用ALTERTABLEtable_nameADDCOLUMNnew_columnVARCHAR(255)AFTERexisting_column,删除字段使用ALTERTABLEtable_nameDROPCOLUMNcolumn_to_drop。添加字段时,需指定位置以优化查询性能和数据结构;删除字段前需确认操作不可逆;使用在线DDL、备份数据、测试环境和低负载时间段修改表结构是性能优化和最佳实践。

MySQL函数可用于数据处理和计算。1.基本用法包括字符串处理、日期计算和数学运算。2.高级用法涉及结合多个函数实现复杂操作。3.性能优化需避免在WHERE子句中使用函数,并使用GROUPBY和临时表。

在macOS上安装MySQL可以通过以下步骤实现:1.安装Homebrew,使用命令/bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"。2.更新Homebrew,使用brewupdate。3.安装MySQL,使用brewinstallmysql。4.启动MySQL服务,使用brewservicesstartmysql。安装后,可通过mysql-u

要安全、彻底地卸载MySQL并清理所有残留文件,需遵循以下步骤:1.停止MySQL服务;2.卸载MySQL软件包;3.清理配置文件和数据目录;4.验证卸载是否彻底。

MySQL批量插入数据的高效方法包括:1.使用INSERTINTO...VALUES语法,2.利用LOADDATAINFILE命令,3.使用事务处理,4.调整批量大小,5.禁用索引,6.使用INSERTIGNORE或INSERT...ONDUPLICATEKEYUPDATE,这些方法能显着提升数据库操作效率。

Composer是PHP的依赖管理工具,通过composer.json文件管理项目依赖。1)解析composer.json获取依赖信息;2)解析依赖关系形成依赖树;3)从Packagist下载并安装依赖到vendor目录;4)生成composer.lock文件锁定依赖版本,确保团队一致性和项目可维护性。
