banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật Image code verification  XML
  [Question]   Image code verification 31/03/2008 04:30:44 (+0700) | #1 | 122182
[Avatar]
itnhl
Member

[Minus]    0    [Plus]
Joined: 01/12/2006 15:40:26
Messages: 8
Location: Núi
Offline
[Profile] [PM] [Yahoo!]
Image code verification (tạm gọi là ICV)


-Mục đích: chính của IVC đó là ngăn chặn các đệ trình(submission) tự động
của các automated script. Nếu một form bình thường không có việc xác thực bằng ICV những kẻ phá hoại sẽ tìm cách gửi tự động các khối thông điệp khổng lồ và gây ra Flood, và để tránh mã phát sinh lưu trong view state hoặc các url. IVC được sử dụng để đảm bảo rằng image code chỉ có thể đọc được bởi 1 người cụ thể(nghe có vẻ quái lạ !) nhưng thực tế là vậy, đó là lý do tại sao những Image Code lại có nền và các ký hiệu khó đọc nhằm tránh các chương trình phân tích text từ image, Còn gọi là Captcha image validation.
Captcha(Completely Automated Public Turing test to Tell Computers and Humans Apart) có thể xem them tại http://www.captcha.net/
-Các kĩ thuật:
Tùy thuộc vào ngôn ngữ lập trình mà có mỗi source riêng để thực hiện ICV
+ PHP


Nội dung form Contact:
---------------------------------------------------------------------------------------------------------------------------
Form này chứa 1 link đến mà thực chất là link đến trang php phát sinh mã ảnh. User phải điền đúng mã ảnh thì quá trình submit sẽ được thực hiện
1. <form action="mailer.php" method="post" name="form1" id="form1" style="margin:0px; font-family:Verdana, Arial, Helvetica, sans-serif;font-size:11px; width:300px;" onsubmit="MM_validateForm('from','','RisEmail','subject','','R','verif_box','','R','message','','R');return document.MM_returnValue">
2.
3. Your e-mail:<br />
4. <input name="from" type="text" id="from" style="padding:2px; border:1px solid #CCCCCC; width:180px; height:14px; font-family:Verdana, Arial, Helvetica, sans-serif;font-size:11px;" value="<?php echo $_GET['from'];?>"/>
5. <br />
6. <br />
7.
8. Subject:<br />
9. <input name="subject" type="text" id="subject" style="padding:2px; border:1px solid #CCCCCC; width:180px; height:14px;font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;" value="<?php echo $_GET['subject'];?>"/>
10. <br />
11. <br />
12.
13. Type verification image:<br />
14. <input name="verif_box" type="text" id="verif_box" style="padding:2px; border:1px solid #CCCCCC; width:180px; height:14px;font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;"/>
15. <img src="verificationimage.php?<?php echo rand(0,9999);?>" alt="verification image, type it in the box" width="50" height="24" align="absbottom" /><br />
16. <br />
17.
18. <!-- if the variable "wrong_code" is sent from previous page then display the error field -->
19. <?php if(isset($_GET['wrong_code'])){?>
20. <div style="border:1px solid #990000; background-color:#D70000; color:#FFFFFF; padding:4px; padding-left:6px;width:295px;">Wrong verification code</div><br />
21. <?php ;}?>
22.
23. Message:<br />
24. <textarea name="message" cols="6" rows="5" id="message" style="padding:2px; border:1px solid #CCCCCC; width:300px; height:100px; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;"><?php echo $_GET['message'];?></textarea>
25.
26. <input name="Submit" type="submit" style="margin-top:10px; display:block; border:1px solid #000000; width:100px; height:20px;font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px; padding-left:2px; padding-right:2px; padding-top:0px; padding-bottom:2px; line-height:14px; background-color:#EFEFEF;" value="Send Message"/>
27. </form>
---------------------------------------------------------------------------------------------------------------------------
Nội dung của image verification script
---------------------------------------------------------------------------------------------------------------------------
1. <?php
2. header('Content-type: image/jpeg');
3.
4. $width = 50;
5. $height = 24;
6.
7. $my_image = imagecreatetruecolor($width, $height);
8.
9. imagefill($my_image, 0, 0, 0xFFFFFF);
10.
11. // add noise
12. for ($c = 0; $c < 40; $c++){
13. $x = rand(0,$width-1);
14. $y = rand(0,$height-1);
15. imagesetpixel($my_image, $x, $y, 0x000000);
16. }
17.
18. $x = rand(1,10);
19. $y = rand(1,10);
20.
21. $rand_string = rand(1000,9999);
22. imagestring($my_image, 5, $x, $y, $rand_string, 0x000000);
23.
24. setcookie('tntcon',(md5($rand_string).'a4xn'));
25.
26. imagejpeg($my_image);
27. imagedestroy($my_image);
28. ?>
Mã php khi submit
---------------------------------------------------------------------------------------------------------------------------
1. <?php
2. // remember to replace you@email.com with your own email address lower in this code.
3.
4. // load the variables form address bar
5. $subject = $_REQUEST["subject"];
6. $message = $_REQUEST["message"];
7. $from = $_REQUEST["from"];
8. $verif_box = $_REQUEST["verif_box"];
9.
10. // remove the backslashes that normally appears when entering " or '
11. $message = stripslashes($message);
12. $subject = stripslashes($subject);
13. $from = stripslashes($from);
14.
15. // check to see if verificaton code was correct
16. if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
17. // if verification code was correct send the message and show this page
18. mail("you@email.com", 'Online Form: '.$subject, $_SERVER['REMOTE_ADDR']."\n\n".$message, "From: $from");
19. // delete the cookie so it cannot sent again by refreshing this page
20. setcookie('tntcon','');
21. } else {
22. // if verification code was incorrect then return to contact page and show error
23. header("Location:".$_SERVER['HTTP_REFERER']."?subject=$subject&from=$from&message=$message&wrong_code=true");
24. exit;
25. }
26. ?>
---------------------------------------------------------------------------------------------------------------------------
Code demo http://www.thewebhelp.com/php/php_contact_form_with_image_validation/thewebhelp_contact_form_with_validation.zip
+ ASP.Net
Xem ví dụ tại đây: http://www.codeproject.com/KB/aspnet/ImageVerifier.aspx

Mọi người hãy cho ý kiến thêm để có cái nhìn toàn diện về ICV. smilie
[Up] [Print Copy]
  [Question]   Re: Image code verification 23/04/2009 00:42:17 (+0700) | #2 | 178132
[Avatar]
phstiger
Member

[Minus]    0    [Plus]
Joined: 23/01/2007 17:47:26
Messages: 261
Offline
[Profile] [PM]
Theo mình thì cái code ICV PHP nên dùng session, không nên dùng Cookie. Vì nếu dùng Cookie thì nó sẽ lưu cái
md5($rand_string).'a4xn' 

xuống cookie tức là ở client. Như vậy client vẫn có thể Flood được.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|