securimage.php的簡單介紹

本文目錄一覽:

PHP驗證碼工具-Securimage如何運用到網頁中

這是PHP驗證碼工具-Securimage的源地址:phpcaptcha.org/documentation/quickstart-guide/告訴做的步驟,我做到第2部分的時候就沒勝利了!

檢驗用戶是否有權使用某功能的織夢函數TestPurview

函數TestPurview($n)雖然,看上去只是一個相對比較簡單的函數,但是這個函數是非常非常重要的,試想一下如果一個系統中沒有檢驗某個用

戶是否有權限操作某些功能的話,那麼,這個系統一定非常危險,因為,隨便一個人都可以操作某個功能,例如,進入後台,刪除欄目,刪除數據庫等,就如同一個

家四周都沒有牆一樣,隨便什麼人都可以進入,這樣的家完全就是公共場合,完全沒有什麼安全可言,一個系統也是如此。

所以,檢測系統函數就比較重要了,當然,光這個一個函數還不夠,不光要檢驗用戶的使用權限,還要檢驗用戶密碼,是不是管理員,甚至是用戶登錄ip等,都要檢驗一下,這樣才可以稱得上安全的系統。

本函數在“管理員登陸類”userlogin.class.php裡面的第一個函數就是它,返回的值是true或false,若有權限則返回trure否則返回false。

通過教程“織夢中cookie和session的應用”我們知道了,當我們登錄後台後,織夢系統會把登錄的用戶信息寫入session裡面,並把session存放在/data/session文件夾裡面。

因為不同的用戶登錄後台,產生的session是不一樣的,我就在後台註冊一個發布員,用戶名為fby。並且,在後台定義“信息發布員”的權限如下圖所示。

登錄/註冊後可看大圖

我整理了一下“信息發布員”的權限如下:

列出授權欄目(t_AccList)

發布授權文檔(a_AccNew)

列出授權文檔(a_AccList)

列出我發布的文檔(a_MyList)

修改我發布的文檔(a_MyEdit)

刪除我發布的文檔(a_MyDel)

更改個人密碼(sys_MdPwd)

評論管理(sys_Feedback)

管理我的上傳(sys_MyUpload)

當我用fby用戶名登錄後,在data/session/文件夾裡面,生成一個名為sess_3vtlqpg0pnlmc63pd5ai86gl16 的 session 。這個session裡面的內容如下所示。

securimage_code_value|s:4:”npll”;

dede_admin_id|s:1:”8″;

dede_admin_type|s:1:”1″;

dede_admin_channel|s:0:””;

dede_admin_name|s:3:”fby”;

font color=”Blue”dede_admin_purview|s:107:”t_AccList

a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd sys_Feedback

sys_MyUpload plus_留言簿模塊 “;/font

dede_admin_style|s:10:”newdedecms”;

複製代碼

如果我們以超級管理員,也就是最高級別的身份登錄後台後,我們同樣得到類似的如下內容。

securimage_code_value|s:4:”2gsf”;

dede_admin_id|s:1:”1″;

dede_admin_type|s:2:”10″;

dede_admin_channel|s:1:”0″;

dede_admin_name|s:5:”admin”;

font color=”Blue”dede_admin_purview|s:15:”admin_AllowAll “;/font

dede_admin_style|s:10:”newdedecms”;

複製代碼

當登錄後,這些是如何生成的?這個我們在上面提到了,以前的教程已經詳細講解了,其實,就是通過“管理員登陸類”userlogin.class.php裡面的函數來實現的,當然,不只是這個文件。

我們分析上面這些,完全就是為了函數TestPurview($n)作準備的,好了,現在我們來分析一下這個用戶權限檢驗函數。

函數:

function TestPurview($n)

{

$rs = FALSE;

$purview = $GLOBALS[‘cuserLogin’]-getPurview();

if(preg_match(‘/admin_AllowAll/i’,$purview))

{

return TRUE;

}

if($n==”)

{

return TRUE;

}

if(!isset($GLOBALS[‘groupRanks’]))

{

$GLOBALS[‘groupRanks’] = explode(‘ ‘,$purview);

}

$ns = explode(‘,’,$n);

foreach($ns as $n)

{

//只要找到一個匹配的權限,即可認為用戶有權訪問此頁面

if($n==”)

{

continue;

}

if(in_array($n,$GLOBALS[‘groupRanks’]))

{

$rs = TRUE; break;

}

}

return $rs;

}

複製代碼

通過getPurview()方法,我們從session得到了dede_admin_purview裡面的值,因

為,$GLOBALS[‘cuserLogin’]是實例化“登錄類”的對像,而這個登錄類的構造函數,在我們實例化時,已經把session裡面的值賦

給了$this-userPurview,代碼如下所示。

$this-userID = $_SESSION[$this-keepUserIDTag];

$this-userType = $_SESSION[$this-keepUserTypeTag];

$this-userChannel = $_SESSION[$this-keepUserChannelTag];

$this-userName = $_SESSION[$this-keepUserNameTag];

$this-userPurview = $_SESSION[$this-keepUserPurviewTag];

$this-adminStyle = $_SESSION[$this-keepAdminStyleTag];

複製代碼

從上面代碼我們就不難發現$this-userPurview=$_SESSION[‘dede_admin_purview’],即

t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd

sys_Feedback sys_MyUpload plus_留言簿模塊這些值,明白了這一點,這個TestPurview($n)就簡單多了。

1、條件判斷:

if(preg_match(‘/admin_AllowAll/i’,$purview))

{

return TRUE;

}

複製代碼

如果我們用的是管理員登錄,那麼,$_SESSION[‘dede_admin_purview’]的值等於admin_AllowAll,返回true,所以,這句代碼就是判斷是不是管理登錄。

2、條件判斷

if($n==”)

{

return TRUE;

}

複製代碼

若參數為空,直接返回true,也就是說,只要不提供功能參數,就認為是可以操作的,所以,這一點要注意了,如果你不小心,忘記寫參數,那麼,很可能本想過慮掉的用戶結果沒有過慮掉,這是非常危險的,所以,這個最好有個提示,有個對話框,這樣可以提醒管理員。

3、把登錄的後台的用戶的權限,例如,本例子中的“信息發布員”權限$_SESSION[‘dede_admin_purview’],轉換成數組存放到全局變量$GLOBALS[‘groupRanks’]裡面,以備下面之用。

if(!isset($GLOBALS[‘groupRanks’]))

{

$GLOBALS[‘groupRanks’] = explode(‘ ‘,$purview);

}

複製代碼

4、把功能參數轉換成數組:$ns = explode(‘,’,$n);

5、遍歷:foreach($ns as

$n),就是把傳遞過來的功能參數,通過in_array($n,$GLOBALS[‘groupRanks’])這個函數進行對比,看一下$n裡面的有

沒有存功能在數組$_SESSION[‘dede_admin_purview’]裡面。例如:本例子信息發布員的權限在上我們已經知道了

有:t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd

sys_Feedback sys_MyUpload plus_留言簿模塊這些值。

如果$n是:a_AccNew,t_New,經過上面一個遍歷,我們發現,其中a_AccNew在數

組$GLOBALS[‘groupRanks’],函數立馬跳出來,返回一個true,也就是說織夢的這個函數,只要$n裡面有一個是

與$GLOBALS[‘groupRanks’]裡面的值一樣,

就可以操作這個頁面。而不需要全部都在$GLOBALS[‘groupRanks’]裡面才可以操作這個頁面。

當然,你可以根據自己需要,直接嚴格匹配,只有全部都在登錄用戶的權限裡面才可以操作頁面。這個功能也簡單,只要作如下更改:

if(!in_array($n,$GLOBALS[‘groupRanks’]))

{

$rs = FALSE; break;

}

複製代碼

也就是把$n參數裡面的值判斷一下,只要有一個不在登錄用戶的權限裡面,就返回false,退出操作。

securimage 怎麼調用

Securimage是php強大的驗證碼工具 ,使用起來非常簡單和方便,並且支持ajax調用,因此在這裡給大家推薦一下。

img id=”siimage” style=”border: 1px solid #000; margin-right: 15px” src=”securimage_show.php?sid=?php echo md5(uniqid()) ?” alt=”CAPTCHA Image” align=”left”

a tabindex=”-1″ style=”border-style: none;” href=”#” title=”Refresh Image” onclick=”document.getElementById(‘siimage’).src = ‘securimage_show.php?sid=’ + Math.random(); this.blur(); return false;”img src=”securimage/images/refresh.png” alt=”Reload Image” onclick=”this.blur()” align=”bottom” border=”0″/abr /

網站後台登陸時 驗證碼無法刷新

貼出驗證碼顯示的 代碼吧.

這樣更便於分析原因並解決之。

可以給提提供一個思路。不刷新可能是由於驗證碼被緩存了。如果驗證嗎頁面禁止緩存可能會解決問題。

還有可以在每次顯示驗證碼是 傳入一個無用的但每次都不一樣的隨機數參數,也可以防止緩存

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/181441.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-23 06:40
下一篇 2024-11-23 06:40

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27

發表回復

登錄後才能評論