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/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

发表回复

登录后才能评论