一个完整php验证码实例程序[带demo]

 更新时间:2016年11月25日 15:25  点击:2058
 代码如下 复制代码

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.111cn.net/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us" xmlns="http://www.w3.org/1999/xhtml">
<title>login</title>
<link rel="stylesheet" type="text/css教程" href="/tryit.css教程" />
<script type="text/网页特效">
function getpinimg()
{
 document.getelementbyid("pinimg").src="log_demo.php教程?a=pin&r=" + math.random();
}
</script>
</head>

<body>
<form action="log_demo.php" method="get">
 <input type="hidden" name="a" value="log" />
 user:<input type="text" name="user" size="20" value="test" /><br /><br />
 password:<input type="password" name="pass" size="12" value="123456" /><br /><br />
 pincode:<input type="text" name="pin" size="8" value="" />
 <input type="button" value="getpin" onclick="getpinimg();">
   <img id="pinimg" src="log_demo.php?a=pin" onclick="getpinimg();" />
 <input type="submit" value="submit"><br />
</form>
</body>
</html>

log_demo.php代码

 代码如下 复制代码

<?php
require_once("log_aux.php");

if ($_get['a'] == "pin") {
 getpinimg();
 exit;
}

if ($_get['a'] == "log") {
 $ret = checkpincookie($_get['pin'], 300);
 if ($ret < 0) {
  echo "pin error:$ret ";
  exit;
 }
 // check user name and password.
 echo "ok..$ret ";
 if ("123xx" == 123) {
  echo "dddd ";
 }
 echo $_get['u'];
}

log_aux.php代码

 代码如下 复制代码

<?php
$magic_a = "www.111cn.net34589";
$magic_b = "234566***+";

function getpincookie($pin_code)
{
 global $magic_a;
 global $magic_b;
 $now = time();
 $client_ip = $_server['remote_addr'];
 $pin = md5($now . $client_ip . $magic_a . $pin_code . $maigc_b) . $now;
 return $pin;
}

function checkpincookie($pin_code_in, $timeout=300) // 5 miniuteswww.111cn.net
{
 global $magic_a;
 global $magic_b;
 $pin = substr($_cookie['pin'], 0, 32);
 $time = substr($_cookie['pin'], 32);
 $now = time();
 if ($now - $time > $timeout) {
  return -100;  // time_out
 }
 $pin_code_in = strtolower($pin_code_in);
 $client_ip = $_server['remote_addr'];
 $pin_2 = md5($time . $client_ip . $magic_a . $pin_code_in . $maigc_b);
 if ($pin === $pin_2) {
  return 0;
 } else {
  return -200; // pincode is error.
 }
}

function getpinimg()
{
// $rnd = rand(0, 10);
 $rnd = 0;
 $path = "./www.111cn.net/" . substr("00000$rnd", -4);
 for ($i = 0; $i < 4; ++$i) {
  if (__getpinimg($path)) {
   break;
  }
 }
 exit;
}

function __getpinimg($path)
{
 require("$path/pinmap.php");
 $pinv = $pin[rand(0, $pin_max)];
 list ($file, $pin_code) = explode('#', $pinv);
 $filepath = "$path/$file$pin_ext";

 //  output pincode image.
 $fh = fopen($filepath, "rb");
 if (!$fh) {
  return false;
 }
 $data = fread($fh, 10240); // php just read max size: 8k.
 fclose($fh);

 if (strlen($data) < 200) {
  return false;
 }
 // set cookie;
 header("content-type: image/jpeg");
 $pin_code = strtolower($pin_code);
 $pin = getpincookie($pin_code);
 setcookie("pin", $pin);

 echo $data;
 return true;
}

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<title>几种防御php程序被木马攻击配置详解方法</title>
</head>

<body>
防止跳出web目录
  首先修改httpd.conf,如果你只允许你的php脚本程序在web目录里操作,还可以修改httpd.conf文件限制php的操作路径。比如你的web目录是/usr/local/apache/htdocs,那么在httpd.conf里加上这么几行:

  php_admin_value open_basedir /usr/local/apache

  /htdocs

  这样,如果脚本要读取/usr/local/apache/htdocs以外的文件将不会被允许,如果错误显示打开的话会提示这样的错误:

  warning: open_basedir restriction in effect. file is in wrong directory in

  /usr/local/apache/htdocs/open.php on line 4

  等等。

2、防止php木马执行webshell
  打开safe_mode,

  在,php.ini中设置

  disable_functions= passthru,exec,shell_exec,system

  二者选一即可,也可都选

3、防止php木马读写文件目录
  在php.ini中的

  disable_functions= passthru,exec,shell_exec,system

  后面加上php处理文件的函数

  主要有

  fopen,mkdir,rmdir,chmod,unlink,dir

  fopen,fread,fclose,fwrite,file_exists

  closedir,is_dir,readdir.opendir

  fileperms.copy,unlink,delfile

  即成为

  disable_functions= passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir

  ,fopen,fread,fclose,fwrite,file_exists

  ,closedir,is_dir,readdir.opendir

  ,fileperms.copy,unlink,delfile

  ok,大功告成,php木马拿我们没辙了,遗憾的是这样的话,利用文本数据库教程的那些东西就都不能用了。

  如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。

  net user apache fuckmicrosoft /add

  net localgroup users apache /del

  ok.我们建立了一个不属于任何组的用户apche。

  我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,重启apache服务,ok,apache运行在低权限下了。

  实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了
</body>
</html>

 代码如下 复制代码
function _strips教程lashes($string) {
 if(is_array($string)) {
  foreach($string as $key => $val) {
   $string[$key] = _strips教程lashes($val);
  }
 } else {
  $string = stripslashes($string);
 }
 return $string;
}

//111cn.net提示你:使用方法

 代码如下 复制代码
$post = _stripslashes( $_post );
$get = _stripslashes( $_get );
$ot = _stripslashes( $_post['cc'] );

//这样用户所提交的" ' 增加的了' 或"这样,可以防止一些基本sql注入方法。

php教程获取文件扩展名二种有效方法

$upload_name ='www.111cn.net.rar';  
$attach_ext = strtolower(substr(strrchr($upload_name,'.'),1));   
echo $attach_ext;

//方法二

$extarray = explode('.',$upload_name);
if( is_array( $extarray ) )
{
 $ext = end($extarray);
 echo $ext;
}


/*
在文件上传过程中我们经常会需要取得上传文件的扩展名或叫做后缀名,进行
判断以确定文件类型。

本站原创文章转载注明来源www.111cn.net

名称:random_password()

#作者:克里斯亨特,杰里米阿什克拉夫特

#日期:1999年5月,2000年10月

#用途:返回一个作为密码使用随机单词。元音和辅音
#是交替给一个(希望)pronouncable,因此
#难忘的结果。

#用法:$ my_new_password = random_password();

#(c)1999年克里斯亨特。授予权限是自由包括此脚本
#您的程序。提供这个头是原封不动。

#2000年10月 - 茉莉酸 - Perl代码移植到PHP

function random_password() {

   $maxlen =  6;   # Default to 6

   # Build tables of vowels & consonants. Single vowels are repeated so that
   # resultant words are not dominated by dipthongs

   $vowel = array ("a","e", "i", "o", "u", "y", "ai", "au", "ay", "ea", "ee", "eu", "ia", "ie", "io", "oa", "oi", "oo", "oy");
   $consonant = array ("b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "qu", "r", "s", "t", "v", "w", "x", "z", "th", "st", "sh", "ph", "ng", "nd");
   $password = "";

   srand((double) microtime()*1000000);
   $vowelnext = (int)rand(0,1);  # Initialise to 0 or 1 (ie true or false)

   do {
      if ($vowelnext) {
         $password = $password.$vowel[rand(0,sizeof($vowel))];
      } else {
         $password = $password.$consonant[rand(0,sizeof($consonant))];
      }

      $vowelnext = !$vowelnext;    # Swap letter type for the next one

   } while (strlen($password) <$maxlen);

   return $password;

}

[!--infotagslink--]

相关文章

  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • Django def clean()函数对表单中的数据进行验证操作

    这篇文章主要介绍了Django def clean()函数对表单中的数据进行验证操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-09
  • jQuery Real Person验证码插件防止表单自动提交

    本文介绍的jQuery插件有点特殊,防自动提交表单的验证工具,就是我们经常用到的验证码工具,先给大家看看效果。效果图如下: 使用说明 需要使用jQuery库文件和Real Person库文件 同时需要自定义验证码显示的CSS样式 使用实例...2015-11-08
  • JS实现随机生成验证码

    这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
  • JavaScript实现密码框输入验证

    这篇文章主要为大家详细介绍了JavaScript实现密码框输入验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-01
  • Nest.js 授权验证的方法示例

    这篇文章主要介绍了Nest.js 授权验证的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
  • Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能效果图:先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:复制代码 代码如下: <!DOCTYPE ht...2015-03-15
  • php实现点击可刷新验证码

    验证码类文件 CreateImg.class.php <&#63;php class ValidationCode { private $width,$height,$codenum; public $checkcode; //产生的验证码 private $checkimage; //验证码图片 private $disturbColor = ''; /...2015-11-08
  • el-table树形表格表单验证(列表生成序号)

    这篇文章主要介绍了el-table树形表格表单验证(列表生成序号),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-01
  • 基于JavaScript实现验证码功能

    这篇文章主要介绍了基于JavaScript实现验证码功能的相关资料...2017-04-03
  • selenium 反爬虫之跳过淘宝滑块验证功能的实现代码

    这篇文章主要介绍了selenium 反爬虫之跳过淘宝滑块验证功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-27
  • vue element table中自定义一些input的验证操作

    这篇文章主要介绍了vue element table中自定义一些input的验证操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-18
  • js canvas实现滑块验证

    这篇文章主要为大家详细介绍了js canvas实现滑块验证,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • vue实现表单验证小功能

    这篇文章主要为大家详细介绍了vue实现表单验证小功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
  • 单击按钮发送验证码,出现倒计时的简单实例

    下面小编就为大家带来一篇单击按钮发送验证码,出现倒计时的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 代码...2017-07-06
  • Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法

    这篇文章主要介绍了Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-06-24
  • PHP验证码生成与验证例子

    验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
  • 基于Pytorch版yolov5的滑块验证码破解思路详解

    这篇文章主要介绍了基于Pytorch版yolov5的滑块验证码破解思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-25
  • 快速理解MySQL中主键与外键的实例教程

    主键与外键的关系,通俗点儿讲,我现在有一个论坛,有两张表,一张是主贴 thread,一张是回帖 reply先说说主键,主键是表里面唯一识别记录的字段,一般是帖子id,体现在访问的时候,例如是 thread.php&#63;id=1 表示我要访问的是帖子...2015-11-24
  • jQuery实现发送验证码控制按钮禁用功能

    最近接到新需求,需要实现一个点击发送验证码之后,按钮禁用,在5秒之后取消禁用,看似需求很简单,实现起来还真的好好动动脑筋,下面小编把jquery控制按钮禁用核心代码分享给大家,需要的朋友参考下吧...2021-07-24