간단한 인증 코드를 생성하는 PHP 개발 사용자 로그인 모듈
인증코드의 역할:
해커가 특정 프로그램을 이용해 무차별 대입 공격을 통해 특정 등록 사용자에게 지속적인 로그인 시도를 하는 것을 효과적으로 방지합니다. 실제로 최신 인증 코드는 일반적으로 기계가 일괄적으로 등록하는 것을 방지하고 기계가 일괄적으로 응답을 게시하는 것을 방지합니다. 현재 많은 웹사이트에서는 사용자가 로봇을 사용하여 자동으로 등록, 로그인 및 스팸을 보내는 것을 방지하기 위해 확인 코드 기술을 사용합니다.
소위 인증 코드는 무작위로 생성된 숫자나 기호의 문자열에서 사진을 생성하고, OCR 방지를 위해 사진에 일부 간섭 픽셀을 추가한 후 사용자가 시각적으로 인증을 식별할 수 있도록 하는 것입니다. 코드 정보를 입력해 주세요. 웹사이트 인증을 위해 양식을 제출하며, 일부 기능은 인증에 성공한 경우에만 사용할 수 있습니다.
가장 일반적인 인증코드
1, 4자리, 임의의 한자리 문자열, 가장 독창적인 인증코드는 인증 효과가 거의 없습니다.
2. 무작위 디지털 사진 인증 코드. 사진의 문자는 매우 규칙적이며 일부는 임의의 인터페론이 추가되었을 수 있으며 일부는 임의의 문자 색상이 있으므로 이전보다 확인 효과가 좋습니다. 그래픽과 이미지에 대한 기본 지식이 없는 사람은 이를 깨뜨릴 수 없습니다!
3. 다양한 그림 형식의 임의의 숫자 + 임의의 대문자 영문자 + 임의의 간섭 픽셀 + 임의의 위치.
4. 한자는 등록을 위한 최신 인증 코드입니다. 무작위로 생성되므로 입력이 더 어려워지고 사용자 경험에 영향을 미치기 때문에 일반적으로 덜 사용됩니다.
간단함을 위해 이번 설명의 주요 목적은 두 번째 유형입니다. 먼저 인터넷에서 더 흔히 볼 수 있는 이러한 유형의 인증 코드에 대한 여러 사진을 살펴보겠습니다.
이 네 가지 스타일은 기본적으로 이러한 유형을 나타낼 수 있습니다. 2에서 언급한 인증코드의 종류를 보면 처음에는 첫 번째 사진이 가장 해독하기 쉽고, 두 번째 사진이 두 번째, 세 번째 사진이 더 어렵고, 네 번째 사진이 가장 어려운 것 같습니다.
실제 상황은 어떤가요? 사실, 이 세 가지 유형의 이미지는 똑같이 해독하기 어렵습니다.
첫번째 사진이 가장 쉽습니다. 사진의 배경과 숫자는 같은 색을 사용하고, 글자도 규칙적이고, 글자의 위치도 같습니다.
두번째 사진은 사실 잘 찾아보면 규칙을 알 수 있어요. 배경색과 인터페론이 아무리 바뀌어도 검증문자는 규칙적이고 같은 색이라 없애기 아주 쉽습니다. 인터페론은 모든 비특정 색소가 제거되는 한 가능합니다.
세 번째 사진은 위에서 언급한 것처럼 배경색과 인터페론이 바뀌는 것 외에도 인증문자의 색상도 바뀌고, 각 문자의 색상도 달라서 좀 복잡한 것 같습니다. 이 인증 코드를 해독하는 것은 불가능해 보입니다. 이 기사에서는 이러한 유형의 인증 코드를 예로 들어 보겠습니다. 네 번째 그림에서는 학생들이 직접 생성할 수 있습니다.
네 번째 사진은 세 번째 사진에서 언급한 기능 외에도 텍스트에 두 개의 직선을 추가하여 비율을 방해하는 것처럼 보이지만 실제로는 쉽습니다.
PNG 이미지 인증 코드를 생성하는 기본 이미지 게시:
1. png 그림 생성
2. 그림의 배경색 설정
3. 글꼴 색상 및 스타일 설정
4. 회전 각도 조정 및 위치 지정 png 이미지
6. 등록 기계가 원본 이미지를 분석하여 악성 등록을 방지하도록 노이즈 및 간섭선을 추가합니다
7. 이미지를 출력합니다
8. 이미지가 차지하는 메모리를 해제합니다
다음은 그 예입니다. 인증 코드:
<?php //设置session,必须处于脚本最顶部 session_start(); $image = imagecreatetruecolor(100, 30); //1>设置验证码图片大小的函数 //5>设置验证码颜色 imagecolorallocate(int im, int red, int green, int blue); $bgcolor = imagecolorallocate($image,255,255,255); //#ffffff //6>区域填充 int imagefill(int im, int x, int y, int col) (x,y) 所在的区域着色,col 表示欲涂上的颜色 imagefill($image, 0, 0, $bgcolor); //10>设置变量 $captcha_code = ""; //7>生成随机数字 for($i=0;$i<4;$i++){ //设置字体大小 $fontsize = 6; //设置字体颜色,随机颜色 $fontcolor = imagecolorallocate($image, rand(0,120),rand(0,120), rand(0,120)); //0-120深颜色 //设置数字 $fontcontent = rand(0,9); //10>.=连续定义变量 $captcha_code .= $fontcontent; //设置坐标 $x = ($i*100/4)+rand(5,10); $y = rand(5,10); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); } //10>存到session $_SESSION['authcode'] = $captcha_code; //8>增加干扰元素,设置雪花点 for($i=0;$i<200;$i++){ //设置点的颜色,50-200颜色比数字浅,不干扰阅读 $pointcolor = imagecolorallocate($image,rand(50,200), rand(50,200), rand(50,200)); //imagesetpixel — 画一个单一像素 imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor); } //9>增加干扰元素,设置横线 for($i=0;$i<4;$i++){ //设置线的颜色 $linecolor = imagecolorallocate($image,rand(80,220), rand(80,220),rand(80,220)); //设置线,两点一线 imageline($image,rand(1,99), rand(1,29),rand(1,99), rand(1,29),$linecolor); } //2>设置头部,image/png header('Content-Type: image/png'); //3>imagepng() 建立png图形函数 imagepng($image); //4>imagedestroy() 结束图形函数 销毁$image imagedestroy($image); ?>표시 스타일은 다음과 같습니다.