【thinkphp漏洞】thinkphp学习小笔记(适合新手)

时间:2019-09-15  来源:thinkphp  阅读:

前期背景条件

项目根目录为

http://localhost/site/

新建的模块叫home

我们在IndexController.php里有个add函数

public function add(){
        //$this->show("

:)

欢迎使用 ThinkPHP


[ 您现在访问的是Home模块的Index控制器 ]<script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script>","utf-8");
  echo U("Index/add");
  $this->display("index");
 
    }


访问路径为

http://localhost/site/home/Index/add

1.问题:输出URL如何为静态

U(‘Index/add’);
默认值为
/site/index.php/Home/Index/add.html

 "URL_MODEL"          => "1", //URL模式
返回
/site/index.php/Home/Index/add.html

 "URL_MODEL"          => "2", //URL模式
返回
/site/Home/Index/add.html

 "URL_MODEL"          => "3", //URL模式
返回
/site/index.php?s=/Home/Index/add.html

2.问题:如何缩短路径

总文件index.php

增加
define(‘BIND_MODULE’, ‘Home’);

这样整个路径修改为

http://localhost/site/Index/add

URL_MODEL 为2的情况 add返回路径修改为

/site/Index/add.html

3.问题:如何让U方法出来的路径都是小写
必要条件
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define(‘APP_DEBUG’,false);

必要条件2
config.php

 "URL_CASE_INSENSITIVE"  =>  true,
模板调路径 {:U(‘Index/Add’)}

4.循环模板


Controller层

 $m = M("Web");
  $result = $m->select();
  $this->assign("list",$result);
  $this->display("index");
View层


    {$key}|{$v.name}


5.模板找公共文件
__PUBLIC__

输出/site/Public

6. 错误,正确模板提示 config.php

"TMPL_ACTION_SUCCESS"  =>  "Index:success",  //home/Home/View/Index/success.html
 
"TMPL_ACTION_ERROR"  =>  "Index:success",
原来的跳转模板文件路径

ThinkPHP\Tpl\

补充配置

惯例配置:在惯例配置内对大多数常用参数进行默认配置,因为惯例配置最先加载,优先级别最低,如果不需要做特殊配置的话,完全可以保持默认值,惯例配置位于ThinkPHP/Conf/convention.php,内容摘抄如下:
 复制代码
/**
 * ThinkPHP惯例配置文件
 * 该文件请不要修改,如果要覆盖惯例配置的值,可在应用配置文件中设定和惯例不符的配置项
 * 配置名称大小写任意,系统会统一转换成小写
 * 所有配置参数都可以在生效前动态改变
 */
defined("THINK_PATH") or exit();
return  array(
    /* 应用设定 */
    "APP_USE_NAMESPACE"     =>  true,    // 应用类库是否使用命名空间
    "APP_SUB_DOMAIN_DEPLOY" =>  false,   // 是否开启子域名部署
    "APP_SUB_DOMAIN_RULES"  =>  array(), // 子域名部署规则
    "APP_DOMAIN_SUFFIX"     =>  "", // 域名后缀 如果是com.cn net.cn 之类的后缀必须设置   
    "ACTION_SUFFIX"         =>  "", // 操作方法后缀
    "MULTI_MODULE"          =>  true, // 是否允许多模块 如果为false 则必须设置 DEFAULT_MODULE
    "MODULE_DENY_LIST"      =>  array("Common","Runtime"),
    "CONTROLLER_LEVEL"      =>  1,
    "APP_AUTOLOAD_LAYER"    =>  "Controller,Model", // 自动加载的应用类库层 关闭APP_USE_NAMESPACE后有效
    "APP_AUTOLOAD_PATH"     =>  "", // 自动加载的路径 关闭APP_USE_NAMESPACE后有效

    /* Cookie设置 */
    "COOKIE_EXPIRE"         =>  0,    // Cookie有效期
    "COOKIE_DOMAIN"         =>  "",      // Cookie有效域名
    "COOKIE_PATH"           =>  "/",     // Cookie路径
    "COOKIE_PREFIX"         =>  "",      // Cookie前缀 避免冲突

    /* 默认设定 */
    "DEFAULT_M_LAYER"       =>  "Model", // 默认的模型层名称
    "DEFAULT_C_LAYER"       =>  "Controller", // 默认的控制器层名称
    "DEFAULT_V_LAYER"       =>  "View", // 默认的视图层名称
    "DEFAULT_LANG"          =>  "zh-cn", // 默认语言
    "DEFAULT_THEME"         =>  "",    // 默认模板主题名称
    "DEFAULT_MODULE"        =>  "Home",  // 默认模块
    "DEFAULT_CONTROLLER"    =>  "Index", // 默认控制器名称
    "DEFAULT_ACTION"        =>  "index", // 默认操作名称
    "DEFAULT_CHARSET"       =>  "utf-8", // 默认输出编码
    "DEFAULT_TIMEZONE"      =>  "PRC",    // 默认时区
    "DEFAULT_AJAX_RETURN"   =>  "JSON",  // 默认AJAX 数据返回格式,可选JSON XML ...
    "DEFAULT_JSONP_HANDLER" =>  "jsonpReturn", // 默认JSONP格式返回的处理方法
    "DEFAULT_FILTER"        =>  "htmlspecialchars", // 默认参数过滤方法 用于I函数...

    /* 数据库设置 */
    "DB_TYPE"               =>  "",     // 数据库类型
    "DB_HOST"               =>  "", // 服务器地址
    "DB_NAME"               =>  "",          // 数据库名
    "DB_USER"               =>  "",      // 用户名
    "DB_PWD"                =>  "",          // 密码
    "DB_PORT"               =>  "",        // 端口
    "DB_PREFIX"             =>  "",    // 数据库表前缀
    "DB_FIELDTYPE_CHECK"    =>  false,       // 是否进行字段类型检查
    "DB_FIELDS_CACHE"       =>  true,        // 启用字段缓存
    "DB_CHARSET"            =>  "utf8",      // 数据库编码默认采用utf8
    "DB_DEPLOY_TYPE"        =>  0, // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    "DB_RW_SEPARATE"        =>  false,       // 数据库读写是否分离 主从式有效
    "DB_MASTER_NUM"         =>  1, // 读写分离后 主服务器数量
    "DB_SLAVE_NO"           =>  "", // 指定从服务器序号
    "DB_SQL_BUILD_CACHE"    =>  false, // 数据库查询的SQL创建缓存
    "DB_SQL_BUILD_QUEUE"    =>  "file",   // SQL缓存队列的缓存方式 支持 file xcache和apc
    "DB_SQL_BUILD_LENGTH"   =>  20, // SQL缓存的队列长度
    "DB_SQL_LOG"            =>  false, // SQL执行日志记录
    "DB_BIND_PARAM"         =>  false, // 数据库写入数据自动参数绑定

    /* 数据缓存设置 */
    "DATA_CACHE_TIME"       =>  0,      // 数据缓存有效期 0表示永久缓存
    "DATA_CACHE_COMPRESS"   =>  false,   // 数据缓存是否压缩缓存
    "DATA_CACHE_CHECK"      =>  false,   // 数据缓存是否校验缓存
    "DATA_CACHE_PREFIX"     =>  "",     // 缓存前缀
    "DATA_CACHE_TYPE"       =>  "File",  // 数据缓存类型,支持:File|Db|Apc|Memcache|Shmop|Sqlite|Xcache|Apachenote|Eaccelerator
    "DATA_CACHE_PATH"       =>  TEMP_PATH,// 缓存路径设置 (仅对File方式缓存有效)
    "DATA_CACHE_SUBDIR"     =>  false,    // 使用子目录缓存 (自动根据缓存标识的哈希创建子目录)
    "DATA_PATH_LEVEL"       =>  1,        // 子目录缓存级别

    /* 错误设置 */
    "ERROR_MESSAGE"         =>  "页面错误!请稍后再试~",//错误显示信息,非调试模式有效
    "ERROR_PAGE"            =>  "",    // 错误定向页面
    "SHOW_ERROR_MSG"        =>  false,    // 显示错误信息
    "TRACE_MAX_RECORD"      =>  100,    // 每个级别的错误信息 最大记录数

    /* 日志设置 */
    "LOG_RECORD"            =>  false,   // 默认不记录日志
    "LOG_TYPE"              =>  "File", // 日志记录类型 默认为文件方式
    "LOG_LEVEL"             =>  "EMERG,ALERT,CRIT,ERR",// 允许记录的日志级别
    "LOG_FILE_SIZE"         =>  2097152,    // 日志文件大小限制
    "LOG_EXCEPTION_RECORD"  =>  false,    // 是否记录异常信息日志

    /* SESSION设置 */
    "SESSION_AUTO_START"    =>  true,    // 是否自动开启Session
    "SESSION_OPTIONS"       =>  array(), // session 配置数组 支持type name id path expire domain 等参数
    "SESSION_TYPE"          =>  "", // session hander类型 默认无需设置 除非扩展了session hander驱动
    "SESSION_PREFIX"        =>  "", // session 前缀
    //"VAR_SESSION_ID"      =>  "session_id",     //sessionID的提交变量

    /* 模板引擎设置 */
    "TMPL_CONTENT_TYPE"     =>  "text/html", // 默认模板输出类型
    "TMPL_ACTION_ERROR"     =>  THINK_PATH."Tpl/dispatch_jump.tpl", // 默认错误跳转对应的模板文件
    "TMPL_ACTION_SUCCESS"   =>  THINK_PATH."Tpl/dispatch_jump.tpl", // 默认成功跳转对应的模板文件
    "TMPL_EXCEPTION_FILE"   =>  THINK_PATH."Tpl/think_exception.tpl",// 异常页面的模板文件
    "TMPL_DETECT_THEME"     =>  false,       // 自动侦测模板主题
    "TMPL_TEMPLATE_SUFFIX"  =>  ".html",     // 默认模板文件后缀
    "TMPL_FILE_DEPR"        =>  "/", //模板文件CONTROLLER_NAME与ACTION_NAME之间的分割符
    // 布局设置
    "TMPL_ENGINE_TYPE"      =>  "Think",     // 默认模板引擎 以下设置仅对使用Think模板引擎有效
    "TMPL_CACHFILE_SUFFIX"  =>  ".php",      // 默认模板缓存后缀
    "TMPL_DENY_FUNC_LIST"   =>  "echo,exit",    // 模板引擎禁用函数
    "TMPL_DENY_PHP"         =>  false, // 默认模板引擎是否禁用PHP原生代码
    "TMPL_L_DELIM"          =>  "{",            // 模板引擎普通标签开始标记
    "TMPL_R_DELIM"          =>  "}",            // 模板引擎普通标签结束标记
    "TMPL_VAR_IDENTIFY"     =>  "array",     // 模板变量识别。留空自动判断,参数为"obj"则表示对象
    "TMPL_STRIP_SPACE"      =>  true,       // 是否去除模板文件里面的html空格与换行
    "TMPL_CACHE_ON"         =>  true,        // 是否开启模板编译缓存,设为false则每次都会重新编译
    "TMPL_CACHE_PREFIX"     =>  "",         // 模板缓存前缀标识,可以动态改变
    "TMPL_CACHE_TIME"       =>  0,         // 模板缓存有效期 0 为永久,(以数字为值,单位:秒)
    "TMPL_LAYOUT_ITEM"      =>  "{__CONTENT__}", // 布局模板的内容替换标识
    "LAYOUT_ON"             =>  false, // 是否启用布局
    "LAYOUT_NAME"           =>  "layout", // 当前布局名称 默认为layout

    // Think模板引擎标签库相关设定
    "TAGLIB_BEGIN"          =>  "<",  // 标签库标签开始标记
    "TAGLIB_END"            =>  ">",  // 标签库标签结束标记
    "TAGLIB_LOAD"           =>  true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    "TAGLIB_BUILD_IN"       =>  "cx", // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序
    "TAGLIB_PRE_LOAD"       =>  "",   // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
   
    /* URL设置 */
    "URL_CASE_INSENSITIVE"  =>  true,   // 默认false 表示URL区分大小写 true则表示不区分大小写
    "URL_MODEL"             =>  1,       // URL访问模式,可选参数0、1、2、3,代表以下四种模式:
    // 0 (普通模式); 1 (PATHINFO 模式); 2 (REWRITE  模式); 3 (兼容模式)  默认为PATHINFO 模式
    "URL_PATHINFO_DEPR"     =>  "/",    // PATHINFO模式下,各参数之间的分割符号
    "URL_PATHINFO_FETCH"    =>  "ORIG_PATH_INFO,REDIRECT_PATH_INFO,REDIRECT_URL", // 用于兼容判断PATH_INFO 参数的SERVER替代变量列表
    "URL_REQUEST_URI"       =>  "REQUEST_URI", // 获取当前页面地址的系统变量 默认为REQUEST_URI
    "URL_HTML_SUFFIX"       =>  "html",  // URL伪静态后缀设置
    "URL_DENY_SUFFIX"       =>  "ico|png|gif|jpg", // URL禁止访问的后缀设置
    "URL_PARAMS_BIND"       =>  true, // URL变量绑定到Action方法参数
    "URL_PARAMS_BIND_TYPE"  =>  0, // URL变量绑定的类型 0 按变量名绑定 1 按变量顺序绑定
    "URL_404_REDIRECT"      =>  "", // 404 跳转页面 部署模式有效
    "URL_ROUTER_ON"         =>  false,   // 是否开启URL路由
    "URL_ROUTE_RULES"       =>  array(), // 默认路由规则 针对模块
    "URL_MAP_RULES"         =>  array(), // URL映射定义规则

    /* 系统变量名称设置 */
    "VAR_MODULE"            =>  "m",     // 默认模块获取变量
    "VAR_CONTROLLER"        =>  "c",    // 默认控制器获取变量
    "VAR_ACTION"            =>  "a",    // 默认操作获取变量
    "VAR_AJAX_SUBMIT"       =>  "ajax",  // 默认的AJAX提交变量
    "VAR_JSONP_HANDLER"     =>  "callback",
    "VAR_PATHINFO"          =>  "s",    // 兼容模式PATHINFO获取变量例如 ?s=/module/action/id/1 后面的参数取决于URL_PATHINFO_DEPR
    "VAR_TEMPLATE"          =>  "t",    // 默认模板切换变量

    "HTTP_CACHE_CONTROL"    =>  "private",  // 网页缓存控制
    "CHECK_APP_DIR"         =>  true,       // 是否检查应用目录是否创建
    "FILE_UPLOAD_TYPE"      =>  "Local",    // 文件上传方式
    "DATA_CRYPT_TYPE"       =>  "Think",    // 数据加密方式

);
复制代码

应用配置:调用所有模块之前加载的公共配置文件,位于Application/Common/Conf/config.php,注意如果修改公共模块的名称,公共配置文件的位置也要相应改变,应用配置里没有什么内容,需要自己添加,如下:
  return array(
    //"配置项"=>"配置值"
);
模式配置:如果使用普通应用模式之外的应用模式,可以为应用模式单独添加配置文件,文件存放的位置和命名规则如下:Application/Common/Conf/config_应用模式名称.php,注意模式配置仅仅在运行模式下才会加载
调试配置:如果开启调试模式的话,则会自动加载框架的调试配置文件和应用调试配置文件,他们的位置分别位于ThinkPHP/Conf/debug.php,Application/Common/Conf/debug.php
状态配置:每个应用可以在不同的情况下设置自己的状态,也可称之为应用场景,如果我们要区分开发环境和测试环境,在入口文件中定义define("APP_STATUS","development");那么会加载对应的配置文件Application/Common/Conf/development.php,如果在入口文件中修改为define("APP_STATUS","test");那么会加载对应的配置文件Application/Common/Conf/test.php
模块配置:每个模块会加载自己的配置文件,和模块放在相同目录下,例如:Application/当前模块名/Conf/config.php,如果使用了普通模式之外的其他应用模式,还可以为应用模式单独定义配置文件,名称和存放目录如:Application/当前模块名/Conf/config_应用模式名称.php,注意这个仅在运行模式下才会加载,模块配置文件是可选的。

如果应用的配置文件比较大,想分成几个单独的配置文件或者加载额外的配置文件可以使用扩展配置和动态配置。
2.读取配置

ThinkPHP使用C方法来读取配置节点,就是Config的意思,注意配置项的参数不区分大小写,C("URL_MODEL")和C("url_model")得到的结果是一样的,但是还是建议区分大小写。配置参数名字不能使用“.”,因为这个是用来读取二维参数的,如果没有配置则返回NULL。读取二维参数值的方法如下:C("USER_CONFIG.USER_TYPE");

3.动态配置

可以预先写好配置参数,也可以在方法中动态设置,也是使用C方法,例如:C("参数名称","新的参数值");动态配置仅仅对当前请求有效,对其他的请求无效。注意到动态配置的方法和读取配置的方法是一样的,只不过多了一个参数而已。

4.扩展配置

扩展配置可以自动加载额外的自定义配置文件,配置格式和项目配置的格式一样,设置扩展配置的方式如下:

// 加载扩展配置文件
"LOAD_EXT_CONFIG" => "user,db",

【thinkphp漏洞】thinkphp学习小笔记(适合新手)

http://m.bbyears.com/jiaocheng/67945.html

推荐访问:thinkphp框架原理
相关阅读 猜你喜欢
本类排行 本类最新