日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

PHP Token(令牌)設(shè)計(jì)(3)_PHP教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!

推薦:如何用php過濾危險(xiǎn)html代碼
用PHP過濾html里可能被利用來引入外部危險(xiǎn)內(nèi)容的代碼。有些時(shí)候,需要讓用戶提交html內(nèi)容,以便豐富用戶發(fā)布的信息,當(dāng)然,有些可能造成顯示頁面布局混亂的代碼也在過濾范圍內(nèi)。 #用戶發(fā)布的html,過濾危險(xiǎn)代碼 function uh(str) { farr = array( /\s+/, //


/**
* 檢查是否為指定的Token
*
* @param string token 要檢查的token值
* @param string formName
* @param boolean fromCheck 是否檢查來路,如果為true,會(huì)判斷token中附加的session_id是否和當(dāng)前session_id一至.
* @param string key 加密密鑰
* @return boolean
*/

public static function isToken(token,formName,fromCheck = false,key = GConfig::ENCRYPT_KEY){
tokens = self::getTokens();

if (in_array(token,tokens)) //如果存在,說明是以使用過的token
return false;

source = split(":", GEncrypt::decrypt(token,key));

if(fromCheck)
return source[1] == session_id() && source[0] == formName;
else
return source[0] == formName;
}
}
?>

示例:

首先從_POST里取出token,用isToken判斷.

<?php
include("../common.inc.php");
token = _POST["token"];
if (GToken::isToken(token,"adminLogin",true)) {
vCode = _POST["vCode"];
if (strtoupper(vCode) != strtoupper(_SESSION[GConfig::SESSION_KEY_VALIDATE_CODE ])) {
throw new Exception("驗(yàn)證碼不正確!");
}

vo = new VO_Admin();
vo->setNickName(_POST["name"]);
vo->setPwd(_POST["pwd"]);

mo = new MO_Admin();
mo->setVO(vo);


f = mo->login();
if(!f){
throw new Exception("用戶名或密碼不正確!");
}else{
GToken::dropToken(token);
//header("location:".GDir::getRelativePath("/admin/index.php"));
echo "here"; //如果是外部提交的,這句就不會(huì)打印出來!
}
}
sFile = GDir::getAbsPath(GConfig::DIR_SERIALIZE ,"admin/login");
tpl = GSerialize::load(sFile);
if (tpl === false) {
tpl = new GTpl(GConfig::DIR_SKIN ,GConfig::DEBUG_TPL_FILE );
tpl->load(array(
"header" => "admin/header.html",
"footer" => "admin/footer.html",
"admLogin" => "admin/login.html",
"admLoginJs"=> "admin/loginJs.html"
));
GSerialize::save(tpl,sFile);
}
tpl->assign("title","管理員登陸");
tpl->assign("path",GDir::getRelativePath(SITE_DIR));
tpl->assign("vImg",GDir::getRelativePath("/vImg.php"));
if (MO_Admin::isLogined()) {
tpl->parseBlock("blk_logined");
}else {
tpl->assign("token",GToken::granteToken("adminLogin"));
tpl->parseBlock("blk_loadScripts","cond_notLogin");
tpl->parseBlock("blk_notLogin");
}
echo tpl->parse("header");
echo tpl->parse("admLogin");
echo tpl->parse("footer");
echo tpl->parse("admLoginJs");
?>

這一切看著似乎是沒有問題了.
如果想判斷是否是執(zhí)行的匹配動(dòng)作,可以把isToken里的formName改一下,運(yùn)行,很好,沒有匹配上.證明這個(gè)成功.

是否能避免重復(fù)提交,我沒有驗(yàn)證,太簡單的邏輯了.

余下的就是判斷 來路檢查 是否正常工作了.
把上面的示例產(chǎn)生的html copy到本地的一個(gè)網(wǎng)頁內(nèi)(以達(dá)到不同的域的目的),運(yùn)行,檢查來路不明,沒有執(zhí)行動(dòng)作(需要把isToken的第三個(gè)參數(shù)設(shè)為true).
把isToken的第三個(gè)參數(shù)設(shè)置為false,提交,指定的動(dòng)作執(zhí)行了!

分享:php實(shí)現(xiàn)頁面GZIP壓縮輸出
餅干是這樣壓縮的——PHP使用zlib擴(kuò)展實(shí)現(xiàn)頁面GZIP壓縮輸出 GZIP(GNU-ZIP)是一種壓縮技術(shù)。經(jīng)過GZIP壓縮后頁面大小可以變?yōu)樵瓉淼?0%甚至更

共3頁上一頁123下一頁
來源:模板無憂//所屬分類:PHP教程/更新時(shí)間:2010-03-06
相關(guān)PHP教程