验证码识别一般分为以下几个步骤:
1. 取出字模
2. 二值化
3. 计算特征
4. 对照样本
代码如下 | 复制代码 |
$_img = imagecreatetruecolor($_width, $_height); $_white = imagecolorallocate($_img, 250, 250, 250); imagefill($_img, 0, 0, $_white); $_gray = imagecolorallocate($_img, 196, 196, 196); imagerectangle($_img, 0, 0, $_width-1, $_height-1, $_gray); for ($i=0; $i < 6; $i++) { for ($i=0; $i < 50; $i++) { for ($i=0; $i < $_code_length ; $i++) { header("Content-Type:image/png"); imagepng($_img); imagedestroy($_img); |
验证码使用方法
代码如下 | 复制代码 |
$getcode = $_POST['code']; if( $_SESSION["code"] = $getcode ) |
当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。
打开magic_quotes_gpc来防止SQL注入
php.ini中有一个设置:magic_quotes_gpc = Off
这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,
比如把 ' 转为 '等,对于防止sql注射有重大作用。
如果magic_quotes_gpc=Off,则使用addslashes()函数
另外对于php手册中get_magic_quotes_gpc的举例:
代码如下 | 复制代码 |
if (!get_magic_quotes_gpc()) { $lastname = addslashes($_POST[‘lastname’]); } else { $lastname = $_POST[‘lastname’]; } |
最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。
再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:
mysql_real_escape_string 必须在(PHP 4 >= 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的当前字符集,而mysql_escape_string 不考虑。
(1)mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集
使用方法如下:
代码如下 | 复制代码 |
$sql = "select count(*) as ctr from users where username02.='".mysql_real_escape_string($username)."' and 03.password='". mysql_real_escape_string($pw)."' limit 1"; |
自定函数
代码如下 | 复制代码 |
|
总结一下:
* addslashes() 是强行加;
* mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
* mysql_escape_string不考虑连接的当前字符集。
dz中的防止sql注入就是用addslashes这个函数,同时在dthmlspecialchars这个函数中有进行一些替换$string = preg_replace(/&((#(d{3,5}|x[a-fA-F0-9]{4}));)/, &1,这个替换解决了注入的问题,同时也解决了中文乱码的一些问题。
验证码生成程序我这里就不介绍了,大家可参考http://www.111cn.net/phper/phpanqn/46698.htm 下面介绍一个简单的
代码如下 | 复制代码 |
<?php 验证码 |
生成后,我们要在实际的项目中应用,通常我们使用ajax可以实现点击验证码时刷新生成新的验证码(有时生成的验证码肉眼很难识别),即“看不清换一张”。填写验证码后,还需要验证所填验证码是否正确,验证的过程是要后台程序来完成,但是我们也可以通过ajax来实现无刷新验证。
验证验证码正确或错误的方法
验证码图片上的文字被存放到了SESSION 变量里面,验证的时候,我们需要将SESSION 里面的值和用户输入的值进行比较即可。
$_SESSION[6_letters_code] – 存放着验证码的文字值
$_POST[6_letters_code] – 这是用户输入的验证码的内容
我们建立一个前端页面index.html,载入jquery,同时在body中加入验证码表单元素:
代码如下 | 复制代码 |
<p>验证码:<input type="text" class="input" id="code_num" name="code_num" maxlength="4" /> |
html代码中,<img" width=100% src="code_num.php"即调用了生成的验证码,当点击验证码时,刷新生成新的验证码:
代码如下 | 复制代码 |
$(function(){ |
刷新验证码,其实就是重新请求了验证码生成程序,这里要注意的是调用code_num.php时要带上随机参数防止缓存。接下来填写好验证码之后,点“提交”按钮,通过$.post(),前端向后台chk_code.php发送ajax请求。
代码如下 | 复制代码 |
$(function(){ |
后台chk_code.php验证:
代码如下 | 复制代码 |
session_start(); |
后台根据提交的验证码与保存在session中的验证码比对,完成验证。
本文章给大家介绍利用session存储与gd库一并生成验证码程序,同时会加入一些干扰元素,这样就可以简单的防机器注册了,下面我来给各位同学介绍介绍。PHP验证码并生成图片程序,采用了session识别,稍微改进了一下目前网络上流传的PHP验证码,加入杂点,数字颜色随机显示,控制4位数字显示;话不多说了,程序如下,分享出来。
新建yz.php验证码生成文件:
注意:以下代码需要打开php的GD库,修改php.in文件的配置,把已经注释掉的行之前的分号取消即可:extension=php_gd2.dll。
代码如下 | 复制代码 |
<?php private function createCheckCode(){ function __destruct() ?> |
到具体调用的地方,用这样的形式:<img" width=100% src="/yz.php" align="absmiddle" />就可以了;验证的时候验证session:$_SESSION['VCODE']的值就可以了。还可以对以上代码稍微改进,改成两个数字相加求和的形式
实例
代码如下 | 复制代码 |
$this->load->library ( 'pagination' ); |
其中:
代码如下 | 复制代码 |
|
这两句判断了参数是否为数字。防止非法字符输入。