ホームページ >バックエンド開発 >PHPチュートリアル >PHP認証コードのクラックについて。解決

PHP認証コードのクラックについて。解決

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 13:36:001605ブラウズ

PHP認証コードのクラックについて。
ウェブサイトでの爆発を防ぐために、確認コードを追加することが最善です。
市場には通常、
英語 + 数字、中国語、JS の数種類の認証コードがあり、
珍しい中国モバイルの画像読み取り認証コードもあります。
これは非常に強力に見えますが、実際にはあまり良くありません。答えは 8 つあります。
数字が存在するかどうかを判断した後、4つの答えを固定できます。騙しに頼れば、うまくいく可能性はかなり高くなります。

最後に、干渉点と干渉線を追加します。次に、フォントなどを変形させます。

PHP は通常、GD ライブラリを使用してイメージと SESSION を生成し、認証を実現します。
検証コード レベルを突破した後、セッション ID を取得するリクエストをシミュレートできます。認証コードを解析し、ログイン認証を登録します。

確認コードが解読された後のプロセスは基本的にスムーズです。次に、アカウントのパスワードやスパムメッセージなどを確認しようとしました...

プロセスを理解すれば、警戒できるため、いくつかの問題が関係しています。
1. 位置が固定され、形状が変化しない一部の文字を識別しやすくする必要があります。
2. セッションを適切に設定する必要があります。 SESSIONは検証後すぐにクリアし、URL値の転送設定を禁止するなど...
3. 適切な時間と頻度の制限を設定します。

以下は Baidu の検証コード BZ6E ですが、送信元を特定できるはずですが、数回送信すると失敗します。
各文字が干渉線と少しひねりを加えて接続されているのは少し難しいですが、タオバオには干渉線がありません。
誰かがそれを壊す方法を話し合って考えてみましょう。 Tiebaには今でも頻繁にコメントを投稿する人がいます。


さて、今回はここまでです。


PHP コード

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
$image_name = 'baidu.jpg';
$image = "http://tieba.baidu.com/cgi-bin/genimg?0013286908280168B65F46CEDCD48CF9D46DF47A64587DA42FC48BF1CF8D47BD0D0BC2EE39911C9918D5CF46E79CF94FFA71BC0DC14DAE59197F42F24B4455C205062670A2977101F1A661F7F4716A8BC2C21D586F886CA300E0D42874D6365A1216622D9740163479D1DD416DAE5D70C09EA834F6B9EC307A29CDAF8D0C78FE159402800B113F6039195E5D683695532E4E2FFD8563D732AD19EDFB147B7569B617BDFBE487CE77AE49E75D83BA56B7038971E2081F647A&t=0.7108543934300542";    


$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $image); 
curl_setopt($curl, CURLOPT_REFERER, 'http://tieba.baidu.com/f?kw=baidu'); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
$result = curl_exec($curl); 
curl_close($curl); 
file_put_contents($image_name, $result);


$size = getimagesize($image_name);
$im = imagecreatefromjpeg($image_name);
imagejpeg($im, 'baidu.jpg',100);
$width = $size[0];
$height = $size[1];


for($x = 1; $x < $width; $x ++)
{
    for($y = 1; $y < $height; $y ++)
    {
        $color = imagecolorat($im, $x, $y);
        $_col[$x][] = $color;
        if($color < '16777215') $all_color[$color] = $color;
    }
}

$n = array_sum($all_color) / count($all_color);

foreach ($_col as $key=>$val)
{
    foreach ($val as $k=>$v)
        $col[$key] .= $v < $n ? '1':' ';
}

// 去多余行列
foreach ($_col as $key=>$val)
    if(array_sum($val) < 1) unset($col[$key]);


foreach ($col as $key=>$val)
{
    $val = trim($val);
    if(empty($val)) unset($col[$key]);
}

echo '<pre class="brush:php;toolbar:false">';
print_r($col);





-----解決策---------------- - ---良い投稿ですが、Zhongji の検証とクラッキングに関する記事を読みましたが、よくわかりません...

------解決策------------------ Baidu の認証コードを解読する方法を議論することは何を意味しますか?昔、Baidu の認証コードが特定の機能に基づいて元に戻される可能性があり、その後修正されたことを覚えています。

よく人が爆発するって言ってましたが、それは人力によるDDoSのせいで、1000人で一斉に攻撃する場合、プログラムとハードウェアが追いつかないと完全に止められないので回避されます。純粋にプログラムの観点から見ると、検証コードはありそうにありません。 Baidu プログラマーを過小評価しないでください。認証コードの識別に関しては、識別の鍵となるのは認識率です。認証コードが何度も入力されなかった場合、その認証コードはどのくらいの期間、IP を直接ブロックします。レートは高くありません、それは単なる浮雲です。

------解決策------------------ 2 値化は適切ではなく、通常、処理中にある程度の精度が失われます。検証コードを比較的簡単に変更する必要がある場合は、

非 OCR メソッドを見つけるためにデータベースを使用する必要があります。データシミュレーションを使って、カバー率が○○%以上になれば、単語が見つかったと考えられると思います。干渉を直接無視します

私は個人的にこの方法を使用し、いくつかのオープンソース プログラムを試しましたが、その効果は悪くなく、その率は 30% ~ 90% 以上です


もちろん、オープンソースのプログラムは、使用されているフォントや変形方法もすべて明らかですが、、、オープンソースでないものは、自分で発見するしかありません、ほほ~~~~~~

------解決策------------------ 画像認識 (OCR) は、多くのアルゴリズムを備えた幅広い技術です
現在の OCR 技術は非常に洗練されています

しかし、それを検証コードの識別に使用すると、あまりにも非倫理的になります

A調和のとれた社会はみんなで創る必要があります


------解決策---------専門家がここにいます

------解決策---------ついでに爆破されました
私は初心者なので、まだ根本的な解決策を見つけていませんが、時間制限と IP&& 時間を使って抵抗するのも良いと思います。

------解決策---------普段は糊付け+文字変形を使っています 細かい陰影のある文字(ノイズが増加します)
は通常爆発しません。 ~

------解決策------------------ 率直に言って、これを行うのは基本的に時間の無駄です...

現在、多くの大手 Web サイトが recaptcha を使用していると思いますが、どう思いますか?

また、現在のもう 1 つの傾向は、検証をまったく使用せず、
http://disqus.com/welcome/ などの統計的手法を通じてゴミを特定することです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。