第七星尘

迁离SAE系列:验证码篇

一,前言:

新浪云计算平台SAE更改了计费策略后,新的计费策略使得网站运行的成本越来越高,于是很多开发者包括本人都准备把应用和网站迁离SAE平台了。然而SAE平台跟普通PHP环境始终有区别。特别是当你的应用使用到SAE的一些云服务的时候,此时要迁移就必须改动下代码。本人将整理下自己迁离的一些经验,分享出来,希望对需要的人有帮助。

二,需求分析

互联网上总有些不怀好意的机器人程序,对我们网站的登录口令密码等字段进行枚举暴力破解。如何区分某次登录是人类还是机器人呢?这是个问题。

三、主要思路

网站安全是个复杂问题。本文只简单地讨论防止暴力破解的情况。要区分是人类还是机器人,我们就要出一些识别手段,使得它只有人类才能操作而机器人无法操作。最简单最主流的解决方法便是验证码。在需要安全性验证的地方,加上一层验证码验证,保证它对于人类来说是容易看出来的而程序是难以识别的。当验证码越复杂,机器人就越难破解。 SAE有提供一个生成验证码的类,不过我们也可以在普通PHP环境里达到同样的效果。

四、操作方法

1、 示例代码

Header("Content-type: image/PNG");
$im = imagecreate(44,18);
$back = ImageColorAllocate($im, 245,245,245);
imagefill($im,0,0,$back);
$vcodes = "";
srand((double)microtime()*1000000);
for($i=0;$i<4;$i++){
$font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255));
$authnum=rand(1,9);
$vcodes.=$authnum;
imagestring($im, 5, 2+$i*10, 1, $authnum, $font);
}

$_SESSION['v_code'] = $vcodes;  //将验证码加入SESSION

for($i=0;$i<100;$i++)
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);

2、 示例代码的使用方法 将示例代码放在一个PHP文件里,如checkcode.php。然后在网站页面处调用,如 <img id="checkpic" src="checkcode.php" /> 当用户提交表单时,在PHP代码里对输入验证码内容和$_SESSION[‘v_code’]里的值相比较就好了

分享到: 更多
码字很辛苦,转载请注明来自第七星尘的技术博客《迁离SAE系列:验证码篇》

评论