验证码被绕过的处理方法
我们先来分析下,有验证码发布的流程
1,显示表单
2,显示验证码(条用生成验证码的程序), 将验证码加密后放进 session 或者 cookie
3,用户提交表单
4,核对验证码无误,数据合法后 写入数据库教程完成
用户如果再发布一条,正常情况下,会再次访问表单页面,验证码图片被动 更新, session 和 cookie 也就跟着变了
但是灌水机操作 不一定非要使用表单页面,它可以直接 模拟post 向服务端程序 发送数据;这样验证码程序没有被调用,当然session和cookie存储的加密验证码就是上次的值,也就没有更新,这样以后无限次的通过post直接发送的数据 ,而不考虑验证码,验证码形同虚设!
所以,在核对验证码后 先将 session和cookie的值清空,然后做数据合法性判断,然偶入库!
这样 一个漏洞就被补上了!
代码如下 | 复制代码 |
<?php教程 if ( md5($_post['vcode']) == $_session['vcode'] ) { $_session['vcode']='';//这句非常重要 } else { exit '验证码不对!'; } //接下来的处理 ...... ?> |
生成验证码图片的程序
代码如下 | 复制代码 |
<?php session_start(); ...... $v = new authcode(); $vcode = $v->getauthcode(); $_session['vcode'] = md5($vcode ); ........ ?> |
表单页面
代码如下 | 复制代码 |
<form action="save.php" method="post"> ...... <input type="text" name="vcode" size="4" /> <img src="vcode.php" alt="看不清请刷新页面" /> </form> |
验证码是怎样被绕过的
传递中文参数,然后修改数据库教程的。
代码如下 | 复制代码 |
<script> function utf8rawurldecode ($source) { |
/*
注:js中,在使用字符转码的时候,推荐使用 encodeuricomponent() 或者 encodeuri(),而非escape()。原因在于,escape() 只是为 ascii字符 做转换工作,转换成的 %unnnn 这样的码,如果要用更多的字符如 utf-8字符库就一定要用 encodeuricomponent() 或 encodeuri() 转换才可以成 %nn%nn 这的码才可以。
js:encodeuricomponent —— decodeuricomponent;php: rawurlencode —— rawurldecode
*/
第一步:下载安装的文件
1. mysql:下载地址mysql-5.1.49-win32.msi;
2. apache: 下载地址httpd-2.2.16-win32-x86-openssl-0.9.8o.msi;
3. php5.3.3 下载地址php-5.3.3-win32-vc6-x86注意:一定要下载php-5.3.3-win32-vc6-x86版本
的,不要下载php-5.3.3-nts-win32-vc6-x86版本,更不要下载vc9版本的,因为他是iis服务器安装版本。
第二步:安装文件
1. 在要安装的磁盘建一个文件夹(笔者的做法是在d盘的根目录下创建一个php文件夹d:php)。
2. 安装apache服务器,安装完成后的目录结果是:d:phppache。
3. 把下载的php-5.3.3-win32-vc6-x86解压的d:php目录中,可以把文件夹的名字改短,结果d:phpphp5
4. 安装mysql数据库教程,它的安装和一般情况一样。笔者把他安装在(d:phpmysql)和php同目录。
第三步:配置php5.3.3
1. 配置php5.3.3,打开php安装目录(笔者是d:phpphp5)可以看到目录下有两个这样的文件php.ini- development和php.ini-production,第一个是开发使用的配置文件,第二个是标准的生产环境的配置。
2. 选择php.ini-development复制一份到同目录下,并改名为php.ini使用文本工具打开,查找extension_dir,可以
看到两个,选择on windows:下面的那个并去得前面的分号修改为extension_dir = "d:/php/php5/ext",读者根
据自己的目录结构配置,目的是找到和php.ini同目录下的ext文件夹中的扩展库。
3. 查找extension=php_,去掉extension=php_curl.dll、extension=php_gd2.dll、extension=php_mbstring.dll、
extension=php_mysql.dll、extension=php_mysqli.dll、extension=php_pdo_mysql.dll、extension=php_xmlrpc.dll前面
的分号。查找short_open_tag = off把它修改成short_open_tag = on,让其支持短标签。
4. 复制php5ts.dll文件到windows/system32目录下,只有php-5.3.3-win32-vc6-x86版本中才有php5ts.dll
php-5.3.3-nts-win32-vc6-x86版本是没有的。
第四步:配置apache
1. 打开apache目录下conf目录中的httpd.conf文件,查找#loadmodule,在其末尾处大概是128行的地方
添加:
loadmodule php5_module "d:/php/php5/php5apache2_2.dll"
phpinidir "d:/php/php5"
addtype application/x-httpd-php .php
addtype application/x-httpd-php .htm
addtype application/x-httpd-php .html
目录结构根据用户自己目录配置。
2. 查找directoryindex index.html 将其修改成directoryindex index.php default.php index.html index.htm default.html
default.htm
3. 查找documentroot将其修改为指向你需要放置web文件的文件夹上(笔者在d:/php目录中创建了一个
www文件夹)所以documentroot就是documentroot "d:/php/www",读者可以根据自己配置来修改。
4. 查找<directory将其修改为你自己配置的documentroot的路径(笔者是<directory "d:/php/www">)
第五步:测试php+apache+mysql是否配置成功
1. 打开mysql在mysql中创建一个新数据库和表。(笔者是userinfo数据库和users表就有id和name两个字段)
测试吗?简单就好,呵呵!!
2. 在上面创建的www文件夹中创建一个index.php文件使用editplus或者其他文本工具打开。
3. 写入:
复制代码 代码如下:
代码如下 | 复制代码 |
<? mysql_connect($db_host,$db_user,$db_pass); mysql_query("set names gb2312"); |
4.启动apache服务器,在浏览器输入http://www.111cn.net回车。
如果看到下图:表示我们大功告成了!祝贺祝贺!
$days = date("y-m-d");
//方法一正则验证日期
代码如下 | 复制代码 |
$reg="/d{4}-d{2}-d{2}/"; |
//方法二用cehckdate验证
代码如下 | 复制代码 |
$k = explode('-',$days); if( checkdate($k[1],$k[2],$k[0]) ) { echo $days,'日期合法'; } else { echo '不是有效的日期'; } |
//方法三简单直观正则验证
代码如下 | 复制代码 |
if( ereg("(19|20)[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",$days)) { echo $days,'为有效日期'; } else { echo |
'无效日期';
}
/*
关于 checkdate函数
checkdate() 函数验证一个格里高里日期。
如果指定的值合法,则该函数返回 true,否则返回 false。
日期在下列情况下为合法:
month 介于且包括 1 - 12
day 的值在给定的 month 所应该具有的天数范围之内,闰年已经考虑进去了。
year 介于且包括 1 到 32767
验证格式为 月/日/年
本站原创教程,转载注明来源于www.111cn.net/phper/php.html
*/
/**
* 获取服务器当前日期时间
*/
代码如下 | 复制代码 |
function get_server_datetime() { date_default_timezone_set("asia/chongqing"); return date("y-m-d h:i:s"); } |
/**
* 获取服务器当前日期
*/
代码如下 | 复制代码 |
function get_server_date() { date_default_timezone_set("asia/chongqing"); return date("ymd"); } |
/**
* 获取服务器当前时间
*/
代码如下 | 复制代码 |
function get_time() { date_default_timezone_set("asia/chongqing"); $timeval["h"] = date("h"); //小时 $timeval["i"] = date("i"); //分钟 $timeval["s"] = date("s"); //秒 return $timeval; } |
相关文章
php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
- 这篇文章主要介绍了Windows批量搜索并复制/剪切文件的批处理程序实例,需要的朋友可以参考下...2020-06-30
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!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 ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
BAT批处理判断服务是否正常运行的方法(批处理命令综合应用)
批处理就是对某对象进行批量的处理,通常被认为是一种简化的脚本语言,它应用于DOS和Windows系统中。这篇文章主要介绍了BAT批处理判断服务是否正常运行(批处理命令综合应用),需要的朋友可以参考下...2020-06-30- javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21- 本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04