『壹』 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中載入這個行為