『壹』 thinkphp里I方法过滤方法都有什么有看到过intval和htmlspecialchars,手册没见过,想知道所有过滤方法
你好,我所知道的:
1 strip_tags:从字符串中去除 HTML 和 PHP 标记
2 mysql_escape_string:转义一个字符串用于 mysql_query
这些函数在防注入方内面起到很大容的作用.
『贰』 thinkphp怎么把俩个查询的数据放在一个函数里面
8附录->8.4类库参考->8.4.4Model类
8.4.4 Model类
getModelName() 获取当前Model的名称
getTableName() 获取当前Model的数据表名称
switchModel(type,vars=array()) 动态切换模型
table() 设置当前操作的数据表
field() 设置要查询的数据字段
where() 设置查询或者操作条件
data(data) 设置数据对象
order(order) 设置排序
limit(limit) 查询限制
page(page) 查询分页
join(join) 进行JOIN查询
having(having) 进行having查询
group(group) 进行group查询
lock(lock) 查询锁定
distinct(distinct) 唯一性查询
count(field) 记录统计
sum(field) 总数查询
min(field) 最小值查询
max(field) 最大值查询
avg(field) 平均值查询
_initialize() 模型初始化方法
_facade(data) 对保存到数据库的数据进行处理
_before_write(&data) 写入数据前的回调方法 包括新增和更新
add(data='',options=array()) 新增数据
_before_insert(&data,options) 写入数据前的回调方法
_after_insert(data,options) 写入数据后的回调方法
selectAdd(fields='',table='',options=array()) 通过Select方式添加记录
save(data='',options=array()) 更新数据到数据库
_before_update(&data,options) 更新数据前的回调方法
_after_update(data,options) 更新成功后的回调方法
delete(options=array()) 删除数据
_after_delete(data,options) 删除成功后的回调方法
select(options=array()) 查询数据集
_after_select(&resultSet,options) 查询成功后的回调方法
findAll(options=array()) select方法的别名
_options_filter(&options) 表达式过滤回调方法
find(options=array()) 查询数据
_after_find(&result,options) 查询成功的回调方法
setField(field,value,condition='') 设置记录的某个字段值
setInc(field,condition='',step=1) 字段值增长
setDec(field,condition='',step=1) 字段值减少
getField(field,condition='',sepa=' ') 获取某个字段值
create(data='',type='') 创建数据对象
autoCheckToken(data) 表单令牌验证
query(sql) 执行原生SQL查询
execute(sql='') 执行原生SQL操作
startTrans() 启动事务
commit() 提交事务
rollback() 事务回滚
getError() 获取模型的错误信息
getDbError() 获取数据库的错误信息
getLastInsID() 获取最后执行的SQL语句
getPk() 获取主键名称
getDbFields() 获取数据表的字段信息
regex(value,rule) 使用正则验证数据
setProperty(name,value) 设置模型的属性值
2.1版新增方法:
db(linkNum,config='') 切换当前数据库连接
高级模型类AdvModel
topN(count,options=array()) 查询满足条件的前N个记录
getN(position=0,options=array()) 查询符合条件的第N条记录
0 表示第一条记录 -1 表示最后一条记录
first(options=array()) 获取满足条件的第一条记录
last(options=array()) 获取满足条件的最后一条记录
returnResult(data,type='') 返回指定的数据类型
setLazyInc(field,condition='',step=1,lazyTime=0) 字段值延迟增长
setLazyDec(field,condition='',step=1,lazyTime=0) 字段值延迟减少
addConnect(config,linkNum=NULL) 增加数据库连接
delConnect(linkNum) 删除数据库连接
closeConnect(linkNum) 关闭数据库连接
switchConnect(linkNum,name='') 切换数据库连接
patchQuery(sql=array()) 批处理执行SQL语句
getPartitionTableName(data=array()) 得到分表的的数据表名
『叁』 thinkPHP3.2中intval过滤超过9位的数字问题
字符串函数回:md5,strip_tags...等答 filter_list: int boolean float validate_regexp validate_url validate_email validate_ip string stripped encoded special_chars unsafe_raw email url number_int number_float magic_quotes callback
『肆』 thinkphp 匹配最大值在筛选复合条件的
可以参考如下代码进行改写
<script>
<?php define('GET_URL', http_build_query($_GET));?>
var WWW_URL = '<?php echo $_SERVER['SCRIPT_NAME']?>';
var GET_JSON = '<?php echo $_GET ? json_encode(@$_GET) : ""?>';
var GET_SESSION = GET_JSON ? $.parseJSON(GET_JSON) : {};
$(function(){
<?php
if($_GET){
echo 'var obj='.json_encode($_GET).';';
}
?>
if(typeof(obj)!='undefined'){
for(k in obj){
$("#"+k).val(obj[k]);
$("a["+k+"="+obj[k]+"]").parent().addClass("in").siblings().removeClass("in");
}
}
})
</script>
<script>
//封装的公用跳转
function location_href(url, get_obj) {
jQuery.each(get_obj, function (i_get, val) {
//替换对象值,,如没有则新增
GET_SESSION[i_get] = val;
// alert(i_get);
// alert(val);
});
GET_SESSION = jQuery.param(GET_SESSION);
window.location.href = url ? url : WWW_URL + '?' + GET_SESSION;
}
function Filter(c, b) {
var obj = {};
obj[c] = b;
location_href('', obj);
}
</script>
『伍』 thinkphp5 i方法过滤没找到在手册哪里,求助
字符串函数专:md5,strip_tags...等属
filter_list:
int
boolean
float
validate_regexp
validate_url
validate_email
validate_ip
string
stripped
encoded
special_chars
unsafe_raw
email
url
number_int
number_float
magic_quotes
callback
『陆』 thinkphp vendor方法引入第三方类失败
如果你的第三方类库都放在目录下面,并且都以.php为类文件后缀,也没用采用命名空间的话,那么可以使用系统内置的Vendor函数简化导入。
例如,我们把 Zend 的 FilterDir.php 放到 Vendor 目录下面,这个时候 Dir 文件的路径就是
VendorendFilterDir.php,我们使用vendor 方法导入只需要使用:
Vendor('Zend.Filter.Dir');
就可以导入Dir类库了。
Vendor方法也可以支持和import方法一样的基础路径和文件名后缀参数,例如:
Vendor('Zend.Filter.Dir',dirname(__FILE__),'.class.php');
你也可以看下import方法
//导入Org类库包Library/Org/Util/Date.class.php类库
import("Org.Util.Date");
//导入Home模块下面的Application/Home/Util/UserUtil.class.php类库
import("Home.Util.UserUtil");
//导入当前模块下面的类库
import("@.Util.Array");
//导入Vendor类库包Library/Vendor/Zend/Server.class.php
import('Vendor.Zend.Server');
你看下,仅供参考~
『柒』 Thinkphp 5 怎么在控制器引入thinkphp\vendor 的第三方扩展
第三方类库指除了 ThinkPHP 框架、应用项目类库之外的其他类库,一般由第三方系统或产品提供,如 Smarty、Zend
等系统的类库等。
前面使用自动加载或 import 方法导入的类库,ThinkPHP 约定是以 .class.php
为后缀的,非这类的后缀,需要通过 import 的参数来控制。
但对第三类库,由于不会有此约定,其后缀只能认为是 php
。为了方便的引入其他框架和系统的类库,ThinkPHP 特意提供了导入第三方类库的功能。第三方类库统一放置在 ThinkPHP系统目录/Vendor
下面,并且使用 vendor 方法导入。
vendor 方法
vendor 方法的用法和 import
方法完全一致,只是其默认值略有差别。
语法:
boolen vendor(class, baseUrl,
ext)
参数说明: 参数 说明
class 必须,表示要导入的类库,采用命名空间的方式。
baseUrl
可选,表示导入的基础路径,省略的话系统采用 ThinkPHP系统目录/Vendor 目录。
ext 可选,表示导入的类库后缀,默认是 .php
。
与 import 方法的区别在于,vendor 方法默认的导入路径为 ThinkPHP系统目录/Vendor 目录,默认后缀为 .php
。
vendor 方法导入第三方类库例子
例如我们要引入 Zend 的 FilterDir.php 文件,我们把文件带目录放到 Vendor
目录下面,这个时候 Dir 文件的路径就是 VendorZendFilterDir.php 。使用 vendor
方法导入:
vendor('Zend.Filter.Dir');
同样对于包含 . 符号的文件,将 . 号用 # 符号代替,或者指定
ext 参数。
提示
实际上 vendor 方法是调用 import 方法来实现类库导入的,而且 vendor 方法也支持自定义导入路径。但
ThinkPHP 约定所有第三方框架的类库文件统一放到系统的 Vendor 目录下面,因此实际中尽可能的遵守该约定。
另外请格外注意 vendor
的首字母应该小写(官方手册为大写)。
『捌』 thinkphp5 i方法过滤没找到在手册哪里,求助
字符抄串函数:md5,strip_tags...等 filter_list: int boolean float validate_regexp validate_url validate_email validate_ip string stripped encoded special_chars unsafe_raw email url number_int number_float magic_quotes callback
『玖』 thinkphp怎么做才是安全的sql防注入
注入的产生一般都是对用户输入的参数未做任何处理直接对条件和语句进行拼装.
代码举例:
//不安全的写法举例1
$_GET['id']=8;//希望得到的是正整数
$data=M('Member')->where('id='.$_GET['id'])->find();
$_GET['id']='8 or status=1';//隐患:构造畸形查询条件进行注入;
//安全的替换写法
$data=M('Member')->where(array('id'=>$_GET['id']))->find();//使用数组方式将自动使用框架自带的字段类型检测防止注入
$data=M('Member')->where(array('id'=>(int)$_GET['id']))->find();//类型约束
$data=M('Member')->where('id='.intval($_GET['id']))->find();//类型转换
$data=M('Member')->where(array('id'=>I('get.id','','intval')))->find();//本人习惯写法
$data=M('Member')->where(array('id'=>':id'))->bind(':id',I('get.id'))->select();//PDO驱动可以使用参数绑定
$data=M('Member')->where("id=%d",array($_GET['id']))->find();//预处理机制
//不安全的写法举例2
$_GET['id']=8;//希望得到的是正整数
$data=M()->query('SELECT * FROM `member` WHERE id='.$_GET['id']);//执行的SQL语句
$_GET['id']='8 UNION SELECT * FROM `member`';;//隐患:构造畸形语句进行注入;
2.防止注入的总的原则是<<根据具体业务逻辑,对来源于用户的值的范围,类型和正负等进行限制和判断>>,同时<<尽量使用THINKPHP自带的SQL函数和写法>>.
3.在THINKPHP3.2版本中的操作步骤是:
一:在项目配置文件中添加配置: 'DEFAULT_FILTER' => 'htmlspecialchars', //默认过滤函数
二: 使用框架带的I方法获取来自用户提交的数据;
例子:M('Member')->save(array('content'=>I('post.content')));这样添加的content内容是经过htmlspecialchars处理过的.
4.为COOKIE添加httponly配置
5.最新版本的thinkphp已经支持此参数。
9.富文本过滤
富文本过滤是,XSS攻击最令人头疼的话题,不仅是小网站,就连BAT这样的巨头也是三天两头的被其困扰.
『拾』 Thinkphp template_filter 对应的行为没发挥作用
源码在Template.class.php中加载这个行为