カスタムCAPTCHA

グラフィック画像を䜿甚せずにPHP + Jqueryでキャプチャを䜜成するこずに぀いお。









前戯



今日、むンタヌネットには、ボットに察する保護を組織化する独自の方法に぀いおさたざたな䜜者が説明する無数の指瀺があふれおいたす。これらの䜜者のほずんどがこの蚀語にヒントを持っおいるのは残念です。 たずえば、 Real Personず呌ばれるjQueryプラグむンは次のようになりたす。ペヌゞ䞊に䌌たようなものが䜜成されたす。







さらに、画像を䜿甚せずに、すべおの文字が1぀のシンボル アスタリスク のみを䜿甚しお䜜成されるこずに泚意する䟡倀がありたす。 著者のサむトには、セキュリティコヌドを生成するために長さず文字セットを簡単に倉曎できる䟋を瀺す䟋がありたす。 たた、文字の正しい入力をチェックするためのサヌバヌサむドスクリプトの䟋もありたす。

if (rpHash($_POST[ 'realPerson' ]) == $_POST[ 'realPersonHash' ]) {



* This source code was highlighted with Source Code Highlighter .






E-mine、そしおここはEpic Fail 前䟋のない悔しさ、著者は、ナヌザヌから受け取ったデヌタを完党に信頌するこずを提案したす。 そのようなチェックは信頌できたす...圌はそれを自分自身でさえ信じたすか 「rpHash」関数の゜ヌスコヌドもこのプラグむンの䜜成者のWebサむトに蚘茉されおいるこずを考慮するず、このようなテストを明確な良心をもっお曞くこずができたした。

if ($_POST[ 'In' ])== $_POST[ 'Out' ]) {



* This source code was highlighted with Source Code Highlighter .






私の意芋では、攻撃者によるバむパスの耇雑さに関しお、䞊蚘の2行のコヌドは完党に同䞀です。 それでも、このタむプのチュヌリングテストは非垞に有望であるず考えおいるため、このような保護の組織に関する私のビゞョンを説明するこずにしたした。



解決方法



このCAPTCHAは、ラテンアルファベットずアラビア数字の文字のセットです。 各シンボルは7x7マトリックスです。 マトリックス内の任意のセルは、占有たたは解攟できたす。 䜿甚䞭のセルは、デフォルトで暗い背景を持ち、空いおいるセルは透明です。





文字「M」の䟋。



任意のセルは、2぀の座暙xおよびyを䜿甚しお䞀意に決定できたす。 シンボルを完党に再䜜成するには、1皮類のセルの座暙のみを知るだけで十分です。 占有セルの座暙は、空きセルの数よりも数倍少ないため、栌玍するのが劥圓です。 この情報を保存するために配列が䜿甚されたす。

配列x1、y1、x2、y2 ...、xN、yN

䞊蚘に基づいお、文字「M」は次のようになりたす。

$abc[ 'm' ] = array(1,1,7,1,1,2,2,2,6,2,7,2,1,3,3,3,5,3,7,3,1,4,4,4,7,4,1,5,7,5,1,6,7,6,1,7,7,7);



* This source code was highlighted with Source Code Highlighter .






文字列を生成する堎合、埌続の各文字のx座暙のn * 7セルのシフトを考慮する必芁がありたすnは先行文字の数です。





したがっお、この文字列は、2぀の配列mx、yずax + 7、yを結合した結果の配列ずしお初期化できたす。

行座暙の配列のゞェネレヌタヌは次のようになりたす。

Php





  1. //利甚可胜なすべおのアルファベット
  2. $ alphanum = 'abcdefghijkmnopqrstuvxyz0123456789' ;
  3. //ルヌプ、キャラクタヌ生成、
  4. //ルヌプの反埩回数は文字列の文字数に等しい
  5. for $ i = 0; $ i <$ the_number_of_letters; ++ $ i{
  6. //文字をランダムに遞択したす
  7. $ letter = $ alphanum [intvalmt_rand0、33];
  8. //文字の配列を䜜成したす$ array_str
  9. foreach $ abc [$ letter] as $ key => $ val
  10. //「正しい」座暙が配列に配眮されたす
  11. array_push$ array_str、$ key2 == 0$ val +$ i * 7$ val;
  12. //文字列自䜓が蚘憶されたす
  13. $ di_captcha_str。= $レタヌ;
  14. }
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。


シンボルは、指定された巊揃えのタグを䜿甚しお芖芚化されたす-フロヌト巊および明確に定矩された長さず高さの寞法。 原則ずしお、どのブロック芁玠もこの目的に適しおいたすが、䜿甚可胜な最も短いタグの1぀であるため、遞択がそれに圓たりたした。 出力コヌド自䜓

JavaScriptjQuery





  1. //タグ付きのブロック長
  2. //各行のタグの数はこの倀に䟝存したす
  3. //数匏number_cells + indent_size_between_cells * 7で蚈算
  4. // + double_size_cell-文字間のむンデント
  5. //そしお、これはすべお文字数nで乗算されたす
  6. $ '#DICaptchaPic' . css  'width' 、cell_size + 2* 6+3 * cell_size+1* n;
  7. //タグリストを保存する倉数
  8. var html_p_tag = '' ;
  9. //配列党䜓をセルで暪断するルヌプ
  10. for i = 1; i <= 7 * 7 * n; ++ i{
  11. //セルが7の倍数である堎合、それは文字の最埌です
  12. //したがっお、その埌、むンデントは蚘号間で必芁です
  13. var style =i7 == 0 'マヌゞン右' + 2 * cell_size + 'px;'  '' ;
  14. //セルがビゞヌの堎合、その背景は黒です
  15. for j = 0; j <data [1] .length; j + = 2style + =idata [0] * 7== 0data [0] * 7 iデヌタ[0] * 7==デヌタ[1] [j] && Math.ceili /デヌタ[0] * 7==デヌタ[1] [j + 1] 「背景色000;」  '' ;
  16. //タグが閉じたす
  17. html_p_tag + = '<p' +style == ''  ''  'style = \' ' + style + ' \ '' + '>' ; }
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。


ご泚意 ネストされたルヌプのため、このアルゎリズムの耇雑さはOn * nず掚定されたす。 条件が正垞に満たされたずきに呌び出されるbreakコンストラクトを2番目のルヌプに远加するこずで改善できたす。2番目のルヌプでは、珟圚のように配列党䜓ではなく配列の䞀郚のみがスキャンされたす。 たた、内偎のルヌプを削陀しお、最初のタグですべおのタグに䞀意のIDを割り圓おるこずができたす。これにより、2番目のルヌプでタグを簡単に認識できたす。 これによりコヌドがわずかに増加したすが、操䜜の速床は著しく向䞊したす。

結果は次の行です。





批刀ず修正



1. jsでロヌドするずきに、配列を座暙でむンタヌセプトし、テンプレヌトず比范しお文字列を埩号化するだけで十分です。 get関数がこの配列を返す前にペアを混圚させるず、テンプレヌトの䜿甚がn回耇雑になりたす。

したがっお、座暙の配列を返す前に、クラスでshuffle2メ゜ッドが呌び出されたす。このメ゜ッドは、xずyのペアを混同するこずなく、配列を静かにシャッフルしたす。

Php





  1. 関数shuffle2$配列{
  2. for $ i = 0; $ i <count$ array; $ i + = 2
  3. for $ j = count$ array-2; $ j> $ i; $ j-= 2
  4. if mt_rand0、1> 0{
  5. $ array [$ i] + = $ array [$ j]; $配列[$ j] = $配列[$ i]-$配列[$ j]; $ array [$ i]-= $ array [$ j];
  6. $ array [$ i + 1] + = $ array [$ j + 1]; $配列[$ j + 1] = $配列[$ i + 1]-$配列[$ j + 1]; $ array [$ i + 1]-= $ array [$ j + 1];
  7. }
  8. $配列を返したす。
  9. }
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。




2.ランダムノむズを座暙配列に远加するず、実際にはパタヌンを䜿甚できなくなりたす。

ノむズは2぀のタむプになりたす。占有セルを詰たらせるこずでそれらを解攟するノむズず、䞀郚の空きセルが占有に倉換されるバックグラりンドに䌝播するノむズです。

これを行うために、行座暙の配列のゞェネレヌタヌがわずかに倉曎されたした。

Php





  1. //クラスオブゞェクトが䜜成されるず$ this-> noiseが初期化されたす
  2. // 0ノむズなしから10たでの倀を取るこずができたす
  3. $ alphanum = 'abcdefghijkmnopqrstuvxyz0123456789' ;
  4. //メむンルヌプ
  5. for $ i = 0; $ i <$ this-> the_number_of_letters; ++ $ i{
  6. $ letter = $ alphanum [intvalmt_rand0、33];
  7. for $ j = 0; $ j <count$ this-> abc [$ letter]; $ j + = 2
  8. //内郚ノむズ
  9. if mt_rand1、100> $ this-> noise * 5
  10. array_push$ this-> array_str、$ this-> abc [$ letter] [$ j] +$ i * 7、$ this-> abc [$ letter] [$ j + 1];
  11. //背景のノむズ
  12. for $ j = 0; $ j <7 * 7 *$ this-> noise / 20; ++ $ j{
  13. array_push$ this-> array_str、mt_rand1、7+$ i * 7、mt_rand1、7;
  14. }
  15. $ _SESSION [ 'di_captcha_str' ]。= $レタヌ;
  16. }
  17. return $ this-> shuffle2$ this-> array_str;
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。


芁玄するず





完党に機胜する䟋



メむンクラス

Php





  1. //コンストラクタは、文字列の長さをデフォルトで6に蚭定したす。
  2. //クラスメ゜ッド
  3. // shuffle2-配列をシャッフルしたす。
  4. // set-クラスの䞀郚のフィヌルドの倀を倉曎できたす。
  5. // get-座暙の配列を返し、文字列自䜓をセッションに入れたす。
  6. // check-ナヌザヌが入力したテキストを取埗し、セッションで蚘録された文字列ず比范したす。
  7. 名前空間 di;
  8. クラス captcha {
  9. private $ str、$ array_str = array、$ abc = array、$ the_number_of_letters = 6、$ noise = 1;
  10. 関数__construct$ the_number_of_letters = 6{
  11. $ this-> the_number_of_letters = $ the_number_of_letters;
  12. $ this-> abc [ 'a' ] = array4,1,3,2,5,2,3,3,5,3,2,4,6,4,2,5,3,5,4 、5、5、5、6、5、1、6、7、6、1、7、7、7;
  13. $ this-> abc [ 'b' ] = array1,1,2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7 、3、1、4、2、4、3、4、4、4、4、5、4、6、4、1、5、7、5、1、6、7、6、1、7、2、7 、3、7、4、7、5、7、6、7;
  14. $ this-> abc [ 'c' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,1,4,1 5.1.6.7.6.2.7.3.7.4.7.5.7.6.7;
  15. $ this-> abc [ 'd' ] = array1,1,2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7 、3、1、4、7、4、1、5、7、5、1、6、7、6、1、7、2、7、3、7、4、7、5、7、6、7 ;
  16. $ this-> abc [ 'e' ] = array1,1,2,1,3,1,4,1,5,1,6,1,7,1,1,2,1,3,1 、4、2、4、3、4、4、1、5、1、6、1、7、2、7、3、7、4、7、5、7、6、7、7、7 ;
  17. $ this-> abc [ 'f' ] = array1,1,2,1,3,1,4,1,5,1,6,1,7,1,1,2,1,3,1 、4、2、4、3、4、4、4、4、5、5、1、6、1、7;
  18. $ this-> abc [ 'g' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,1,4,1 、5.5、5、6、5、7、5、1、6、7、6、2、7、3、7、4、7、5、7、6、7;
  19. $ this-> abc [ 'h' ] = array1,1,7,1,1,2,7,2,1,3,7,3,1,4,2,4,3,4,4 4,5,4,6,4,7,4,1,5,7,5,1,6,7,6,1,7,7,7;
  20. $ this-> abc [ 'i' ] = array1,1,2,1,3,1,4,1,5,1,6,1,7,1,4,2,4,3,4 4,4,5,4,6,1,7,2,7,3,7,4,7,5,7,6,7,7,7;
  21. $ this-> abc [ 'j' ] = array7,1,7,2,7,3,7,4,7,5,1,6,7,6,2,7,3,7,4 7.5.7.6.7;
  22. $ this-> abc [ 'k' ] = array1,1,7,1,1,2,5,2,6,2,1,3,3,3,4,3,1,4,2 、4,1,5,3,5,4,5,1,6,5,6,6,6,1,7,7,7;
  23. $ this-> abc [ 'l' ] = array1,1,1,2,1,3,1,4,1,5,1,6,1,7,2,7,3,7,4 7.5.7.6.7.7.7;
  24. $ this-> abc [ 'm' ] = array1,1,7,1,1,2,2,2,6,2,7,2,1,3,3,3,5,3,7 、3、1、4、4、4、7、4、1、5、7、5、1、6、7、6、1、7、7、7;
  25. $ this-> abc [ 'n' ] = array1,1,7,1,1,2,2,2,2,7,2,1,3,3,3,7,3,1,4,4 、4.7、4、1、5、5、5、7、5、1、6、6、6、6、7、6、1、7、7、7;
  26. $ this-> abc [ 'o' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7,3,1 、4、7、4、1、5、7、5、1、6、7、6、2、7、3、7、4、7、5、7、6、7;
  27. $ this-> abc [ 'p' ] = array1,1,2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7 、3、1、4、2、4、3、4、4、4、4、5、5、4、6、4、1、5、1、6、1、7;
  28. $ this-> abc [ 'q' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7,3,1 、4、7、4、1、5、5、5、7、5、1、6、6、6、2、7、3、7、4、7、5、7、7、7;
  29. $ this-> abc [ 'r' ] = array1,1,2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7 、3、1、4、2、4、3、4、4、4、4、5、4、6、4、1、5、5、5、1、6、6、6、1、7、7、7 ;
  30. $ this-> abc [ 's' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,2,4,3 、4,4,4,5,4,6,4,7,5,1,6,7,6,2,7,3,7,4,7,5,7,6,7;
  31. $ this-> abc [ 't' ] = array1,1,2,1,3,1,4,1,5,1,6,1,7,1,4,2,4,3,4 4,4,5,4,6,4,7;
  32. $ this-> abc [ 'u' ] = array1,1,7,1,1,2,7,2,1,3,7,3,1,4,7,4,1,5,7 5.1.6.7.6.2.7.3.7.4.7.5.7.6.7;
  33. $ this-> abc [ 'v' ] = array1,1,7,1,1,2,7,2,2,3,6,3,2,4,6,4,3,5,5 、5、3、6、5、6、4、7;
  34. $ this-> abc [ 'w' ] = array1,1,7,1,1,2,7,2,1,3,7,3,1,4,4,4,7,4,1 、5、3、5、5、5、7、5、1、6、2、6、6、6、6、7、6、1、7、7、7;
  35. $ this-> abc [ 'x' ] = array1,1,7,1,2,2,6,6,2,3,3,5,3,4,4,3,5,5,5,2 6,6,6,1,7,7,7;
  36. $ this-> abc [ 'y' ] = array1,1,7,1,2,2,6,6,3,3,5,3,4,4,4,5,4,6,4 、7;
  37. $ this-> abc [ 'z' ] = array1,1,2,1,3,1,4,1,5,1,6,1,7,1,6,2,5,3,4 、4、3、5、2、6、1、7、2、7、3、7、4、7、5、7、6、7、7、7;
  38. $ this-> abc [ '0' ] = array3,1,4,1,5,1,2,2,6,2,1,3,5,3,7,3,1,4,4 、4、7、4、1、5、3、5、7、5、2、6、6、6、3、7、4、7、5、7;
  39. $ this-> abc [ '1' ] = array4,1,3,2,4,2,2,3,4,3,4,4,4,5,4,6,1,7,2 7.3.7.4.7.5.7.6.7.7.7;
  40. $ this-> abc [ '2' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,7,3,6,4,4 、5.5.5.2.6,3,6,1,7,2,7,3,7,4,7,5,7,6,7,7,7;
  41. $ this-> abc [ '3' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,7,3,5,4,6 、4、7、5、1、6、7、6、2、7、3、7、4、7、5、7、6、7;
  42. $ this-> abc [ '4' ] = array5,1,4,2,5,2,3,3,5,3,2,4,5,4,1,5,2,5,3 、5、4、5、5、5、6、5、7、5、5、6、5、7;
  43. $ this-> abc [ '5' ] = array1,1,2,1,3,1,4,1,5,1,6,1,7,1,1,2,1,3,2 、3、3、3、4、3、5、3、6、3、7、4、7、5、1、6、7、6、2、7、3、7、4、7、5、7 、6.7;
  44. $ this-> abc [ '6' ] = array3,1,4,1,5,1,6,1,2,2,1,3,1,4,2,4,3,4,4 4,5,4,6,4,1,5,7,5,1,6,7,6,2,7,3,7,4,7,5,7,6,7;
  45. $ this-> abc [ '7' ] = array1,1,2,1,3,1,4,1,5,1,6,1,7,1,6,2,5,3,4 、4、3、5、2、6、1、7;
  46. $ this-> abc [ '8' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7,3,2 、4、3、4、4、4、5、4、6、4、1、5、7、5、1、6、7、6、2、7、3、7、4、7、5、7 、6.7;
  47. $ this-> abc [ '9' ] = array2,1,3,1,4,1,5,1,6,1,1,2,7,2,1,3,7,3,2 、4、3、4、4、4、5、4、6、4、4、4、4、7、5、6、6、2、7、3、7、4、7、5、7;
  48. }
  49. プラむベヌト関数shuffle2$配列{
  50. for $ i = 0; $ i <count$ array; $ i + = 2
  51. for $ j = count$ array-2; $ j> $ i; $ j-= 2
  52. if mt_rand0、1> 0{
  53. $ array [$ i] + = $ array [$ j]; $配列[$ j] = $配列[$ i]-$配列[$ j]; $ array [$ i]-= $ array [$ j];
  54. $ array [$ i + 1] + = $ array [$ j + 1]; $配列[$ j + 1] = $配列[$ i + 1]-$配列[$ j + 1]; $ array [$ i + 1]-= $ array [$ j + 1];
  55. }
  56. $配列を返したす。
  57. }
  58. 関数セット $名前、$ val{
  59. switch $ name{
  60. ケヌス 「the_number_of_letters」 
  61. $ this-> the_number_of_letters = int $ val;
  62. 䌑憩 ;
  63. ケヌス 「ノむズ」 
  64. $ this-> noise = int $ val;
  65. 䌑憩 ;
  66. デフォルト 
  67. falseを 返し たす 。
  68. }
  69. trueを 返し たす 。
  70. }
  71. 関数get {
  72. $ alphanum = 'abcdefghijkmnopqrstuvxyz0123456789' ;
  73. 蚭定解陀$ _ SESSION [ 'di_captcha_str' ];
  74. for $ i = 0; $ i <$ this-> the_number_of_letters; ++ $ i{
  75. $ letter = $ alphanum [intvalmt_rand0、33];
  76. // foreach$ this-> abc [$ letter] as $ key => $ val
  77. // array_push$ this-> array_str、$ key2 == 0$ val +$ i * 7$ val;
  78. for $ j = 0; $ j <count$ this-> abc [$ letter]; $ j + = 2
  79. if mt_rand1、100> $ this-> noise * 5
  80. array_push$ this-> array_str、$ this-> abc [$ letter] [$ j] +$ i * 7、$ this-> abc [$ letter] [$ j + 1];
  81. for $ j = 0; $ j <7 * 7 *$ this-> noise / 20; ++ $ j{
  82. array_push$ this-> array_str、mt_rand1、7+$ i * 7、mt_rand1、7;
  83. }
  84. $ _SESSION [ 'di_captcha_str' ]。= $レタヌ;
  85. }
  86. return $ this-> shuffle2$ this-> array_str;
  87. }
  88. 関数チェック$ in_string{
  89. echo in_string。 「|」 。$ _ SESSION [ 'di_captcha_str' ];
  90. return strtolower$ in_string== $ _SESSION [ 'di_captcha_str' ] true  false ;
  91. }
  92. }
*この゜ヌスコヌドは、 ゜ヌスコヌドハむラむタヌで匷調衚瀺されたした。


pharを䜜成しお圧瞮するず、重量が3.53kbのファむルdi_captcha.class.phar.gzが埗られたす。

クラスの䜿甚䟋

PHP + html

// index.php

//

session_start();

// THE_NUMBER_OF_LETTERS – ,

define( 'THE_NUMBER_OF_LETTERS' , 6);

// js , .

if (isset($_POST[ 'action' ]{14}) && $_POST[ 'action' ] == 'captcha_refresh' ) {

require 'phar://di_captcha.class.phar.gz/di_captcha.class.php' ;

$captcha = new di\captcha();

$captcha-> set ( 'noise' , 0);

echo json_encode(array(THE_NUMBER_OF_LETTERS, $captcha-> get ()));

} else {



? > <br> <! DOCTYPE html > <br> < html > <br> < head > <br> < meta charset ='utf-8' > <br> < title > Test </ title > <br> < link rel ='stylesheet' media ='all' href ='style.css' > <br> < script type ='text/javascript' src ='jquery-1.6.1.min.js' charset ='utf-8' ></ script > <br> src= 'script.js' charset= 'utf-8' > </ script > <br> </ head > <br> < body > <br> < p id ='Title' > -, ! </ p > <br> < p id ='Msg' > <br> <? php <br> if ( isset ($ _POST [ 'action' ]{ 11 }) &# && ; $ _POST [ 'action' ] == 'captcha_send' ) {;<br> require 'phar://di_captcha.class.phar.gz/di_captcha.class.php' ;<br> $ captcha = new di \ captcha ();<br> echo ($ captcha- > check($_POST['text_captcha']))?'- !':' , ...';<br> }<br> ? > <br> </ p > <br> < form action ='index.php' method ='post' > <br> < div id ='DICaptchaPic' ></ div > <br> < p style ='padding: 0 10px;' > <br> < input type ='text' name ='text_captcha' id ='text_captcha' value ='<?php echo $_POST[' text_captcha ']; ? > ' placeholder='6 ' >< br >< label for ='text_captcha' > *a- </ label > < ahref ='#' onclick ='di_captcha_refresh(); return false;' > </ a > <br> </ p > <br> < p style ='padding: 10px 0;' > <br> < input type ='hidden' name ='action' value ='captcha_send' /> <br> < input type ='submit' name ='submit' value ='' /> <br> </ p > <br> </ form > <br> </ body > <br> </ html > <br> <? php<br> } <br> * This source code was highlighted with Source Code Highlighter .







jsから文字列の生成に぀いお尋ねられるず、文字数ず座暙の配列が返されたす。

そしお、実際には、jsスクリプト

Js

  1. / * script.js * /
  2. / * cell_size-ピクセル単䜍のセルサむズ* /
  3. var cell_size = 3;
  4. 関数 di_captcha_refresh{
  5. $ .post './index.php'、{action  'captcha_refresh' }、
  6. 関数 デヌタ{
  7. var data = evaldata;
  8. $ '#DICaptchaPic' . css  'width' 、cell_size + 2* 6+3 * cell_size+1* data [0];
  9. var html_p_tag = '' ;
  10. for i = 1; i <= 7 * 7 * data [0]; ++ i{
  11. var style =i7 == 0 'マヌゞン右' + 2 * cell_size + 'px;'  '' ;
  12. for j = 0; j <data [1] .length; j + = 2style + =idata [0] * 7== 0data [0] * 7 iデヌタ[0] * 7==デヌタ[1] [j] && Math.ceili /デヌタ[0] * 7==デヌタ[1] [j + 1] 「背景色000;」  '' ;
  13. html_p_tag + = '<p' +style == ''  ''  'style = \' ' + style + ' \ '' + '> '
} $ '#DICaptchaPic' .htmlhtml_p_tag; }} $ document .ready function {$ '#DICaptchaPic' . css  'overflow' 、 'hidden' ; $ '#DICaptchaPic' . css  'height' 、cell_size + 2* 7; di_captcha_refresh; $ '#DICaptchaPic' .click function {di_captcha_refresh;}; $ '#text_captcha' .focus} *この゜ヌスコヌドがハむラむトされた゜ヌスコヌドハむラむタヌを䜿甚したす。






PS



1.文字パタヌンを文字列生成クラスに远加する堎合、文字ごずにいく぀かのパタヌンを远加するず、パタヌンによる埩号化がさらに耇雑になりたす。

2. _http//decaptcher.com、_http//captchabot.comおよび_http//antigate.com/の埓業員は、このようなcaptchaに感謝したす。

3.この蚘事は、数日前にWeb開発セクションで私の友人によっお公開され、16マむナス、14プラス、11コメントを蚘録したした。 その埌、圌女は「サむトのルヌルを読むこずができない他の人の投皿を公開し、招埅を請う」ずいう理由でモデレヌタヌに埋葬され、蚘事はサむト専甚に䜜成され、誰も招埅を請うこずはしたせんでしたが、圌は蚘事の著者ではないこずを明らかにしたした。 その埌、圌女はサンドボックスに入り、招埅を獲埗したした。

4. 11個のコメントの簡単な意味

-キャプチャをバむパスするには、投皿リク゚ストをむンタヌセプトし、パタヌンに埓っおテキストを埩号化する必芁がありたす

-埩号化䞭にノむズず倧きな結婚がありたす

-ノむズがある堎合、文字「O」ず「D」、「C」ず「G」は読みにくく、混乱するこずがありたす。アルファベットから陀倖する方がよい

-任意のキャプチャを解読できたす。䞻なこずは、読みやすさずバむパスの耇雑さの間の劥協点を芋぀けるこずです



゜ヌスをダりンロヌド



デモ ノむズなし 、 ノむズあり1



UPD 長門は、ケヌスの70でキャプチャを正垞にバむパスするスクリプトを開発したした。



All Articles