Thinkphp v5.1.x 环境搭建 docker run -it -d -p 80:80 vulfocus/thinkphp:6.0.12 漏洞复现 漏洞分析 这里以thinkphp 6为例进行分析,thinkphp 5类似。Thinkphp的中间件默认会调用handle函数,因此直接在LoadLangPack.php的handle函数中下断点 在detect函数中会从request中提取多个参数 查看config可知,detect...
Thinkphp的中间件默认会调用handle函数,因此直接在LoadLangPack.php的handle函数中下断点 在detect函数中会从request中提取多个参数 查看config可知,detect就是从请求的不同位置中提取lang等参数 默认情况下,allow_lang_list 这个配置为空,因此从lang参数中拿到的变量没有过滤直接传给了$this->range并返回该值 得到lang...
Thinkphp的中间件默认会调用handle函数,因此直接在LoadLangPack.php的handle函数中下断点 在detect函数中会从request中提取多个参数 查看config可知,detect就是从请求的不同位置中提取lang等参数 默认情况下,allow_lang_list 这个配置为空,因此从lang参数中拿到的变量没有过滤直接传给了$this->range并返回该值 得到lang...
此问题源于Thinkphp框架内/thinkphp/library/think/Lang.php文件中detect()方法的配置错误。该方法仅检测浏览器的Accept-Language,导致即使在配置文件中设置默认语言,页面也不会显示所设语言。这可视为框架中的一个小BUG。为解决此问题,可对detect方法进行升级。升级后的代码示例如下:在实际应用中,开发...
1、在后台准备一个功能,修改config.php文件中的默认模板项2、通过url传递t=主题参数可以修改不同的模板'DEFAULT_THEME'=>'your',//设置默认模板主题'TMPL_DETECT_THEME'=>true,//自动侦测模板主题'THEME_LIST'=>'your,my',//支持的模板主题列表2 输出...
然后最最最重要的一点,必须将\thinkphp\library\think\Lang.php 中的detect()方法修改: /** * 自动侦测设置获取语言选择 * @return string*/publicstaticfunctiondetect() {//自动侦测设置获取语言选择$langSet= Config::get('default_lang');if(isset($_GET[self::$langDetectVar])) {//url中设置了语言变...
App.php文件内容:在config中的多语言机制开启时(lang_switch_on = true)执行了detect()将self::range通过URL中发lang参数定义,我们在上面分析过了,接下来分别执行了range()方法和load()方法。 我们首先跟进range()方法:在App.php中调用range为Lang::range() 因此,range()此时直接return了self::$range此参数在de...
'AUTO_DETECT_LANG' => false, // 自动侦测语言 /* 数据库设置 */ 'DB_CHARSET' => 'utf8', // 数据库编码默认采用utf8 'DB_DEPLOY_TYPE' => 0, // 数据库部署方式 0 集中式(单一服务器) 1 分布式(主从服务器) 'DB_RW_SEPARATE' => false, ...
'LANG_AUTO_DETECT' => true, // 自动侦测语言 开启多语言功能后有效 /* 日志设置 */ 'LOG_RECORD' => false, // 默认不记录日志 'LOG_FILE_SIZE' => 2097152, // 日志文件大小限制 'LOG_RECORD_LEVEL' => array('EMERG','ALERT','CRIT','ERR'),// 允许记录的日志级别 ...
'SITE_URL' => 'http://www.tonglingshi.net/', 'SITE_KEYWORDS' => 'php thinkphp', ...);接下来,在config.php(就是自己项目的配置信息文件)里进行配置return array( 'LANG_AUTO_DETECT' => FALSE, /...