サポート » 自作品の告知 » デッドリンクチェッカー

  • typista

    (@typista)


    デッドリンクチェッカーを作りました。WordPressのトップページからリンクを辿り、チェックします。ハイパーリンクであれば、画像も対象です。非同期通信で、同時接続数はチューニング可能にしています。(デフォルト値は2)
    クライアントはもちろん、サーバにも負荷がかかりますので、同時接続数は適宜、試してください。

    ◆使い方
     1. http://typista.xii.jp/wp-content/uploads/dead-link-checker.zipをダウンロード
     2. プラグインディレクトリに解凍
     3. ダッシュボードからアクティベート
     4. リンクチェックの実行は、「ダッシュボード」→「設定」→「Dead Link Checker Plugin」→「start」ボタン。

    以上で、bloginfo(”url”)からリンクを辿り、リンクチェックを開始します。中断も可能です。

    正常なページは、一覧から消えていき、エラーの場合は、HTTPステータスコードとそのリンクを含むURL(非同期の複数コネクション実行のため、最新1つで上書き)も表示します。

    ◆制限事項
    WordPress2.5.1でのみ動作確認済みです。
    jQuery(JavaScript)を利用したチェックのため、このプラグインでのエラー検知が万全ではないようです。
    これは、(予想の域を越えませんが)jQuery、というよりJavaScript(?)では、クロスドメインでのHTTP通信不可のため、擬似的にサーバサイドで回避しています。この対処(出力)が万全でないのかも知れません。
    また、バージョン0.1ではハイパーリンクのみの抽出のため、JSやCSSは対象外です。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • typista

    (@typista)

    補足です。
    今後の対応方針や実際のバージョンアップなどの詳細はhttp://typista.xii.jp/category/wordpress/plugins/dead-link-checkerに掲載していきます。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    これは、(予想の域を越えませんが)jQuery、というよりJavaScript(?)では、クロスドメインでのHTTP通信不可のため、擬似的にサーバサイドで回避しています。この対処(出力)が万全でないのかも知れません。

    万全でないというか、getcrossdomain.php は世界中の誰からも使用可能となっていて、かつ、取得した HTML をそのまま吐くという仕様のため、非常に危険です。即刻公開を中止し、改善するようお願いします。簡単に各種 XSS 攻撃が可能と思われます。
    プラグインの詳細を確認はしていませんが、getcrossdomain.php でリンク先の存在チェックをするならば、404 Not Found になるか否かを返せば、比較的安全になるかと思います。

    typista

    (@typista)

    lilyfanさん、毎度お手数をおかけします。

    ご指摘のとおり、XSSの危険性がありましたので修正したものをバージョン0.2としました。
    すでに0.1をダウンロードされている方がいらっしゃいましたら、すぐに0.2へアップデートをお願いします。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    ご指摘のとおり、XSSの危険性がありましたので修正したものをバージョン0.2としました。

    実はこのバージョン 0.2 にも脆弱性が発見されています。作者さんには報告ずみですが、反応がありませんので、注意を喚起しておきます。

    # ソースを見れば一発で分かる程度の問題なので、もうちょっと作者さんにはがんばってほしいところです……。

    typista

    (@typista)

    度々のご指摘ありがとうございます。
    主に以下の点の修正を施し、XSS対策版の0.3bをリリースいたしました。
    ・get_file_contents()はphp.iniの設定に依存するため、fsockopen()に変更
    ・HTTPステータスコードが301と302のときは、リダイレクト先をチェック(fsockopenの影響で必要になった処理)
    ・明らかに自ドメインの場合のみ取得ソースをecho(入力パラメータ$urlが”/”を含まない場合、末尾に付加)

    別件(feedのチェックでJavaScriptエラーでチェック処理が中断)の調査に時間がかかり、XSS対策のリリースが遅くなってしまいました。
    未だ、この別件は調査中のため、XSS対策のみを優先してリリースするほうが良いと判断しました。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    ・明らかに自ドメインの場合のみ取得ソースをecho(入力パラメータ$urlが”/”を含まない場合、末尾に付加)

    残念ながら全く無意味な対策です。PHP のセキュリティーに関して相当な知識がない限り、自ドメインチェックのコードを書くのは困難です (わたしでも自信がありません)。少なくとも ereg_replace() を使っていはいけません。もっと勉強しましょう。

    Ajax のクロスドメイン制限を越えるスクリプトはセキュリティホールの温床になるため、コンテンツを echo するような機能は一切埋め込むべきではありません。完全に削除されることをおすすめします。

    このフォーラムで「危険なプラグインが紹介されている」という事態はふさわしくないと思いますので、ぜひとも根本的な修正をされることを期待します。改善が見られない場合、管理者にトピックの閉鎖 (今後の紹介禁止) を依頼するかもしれません。「背水の陣」でがんばってください。

    typista

    (@typista)

    私の知識不足により、多くの方にご迷惑をおかけしてしまいました。申し訳ありません。

    lilyfanさんにアドバイスいただいたとおり、PHPではHTTPステータスコードのみを返し(A)、クロスドメイン制約のかからない自ドメインについては、素直にjQueryのみでチェックするような修正とします。

    途中段階では、この対応で改修したバージョンも作っていたのですが、まったく別の問題(B)で諦め、安易に「自ドメインなら」とechoを残してしまいました。

    比較的安全と思われる、上記(A)の対処には(B)も未解決であり、しばらく時間がかかると思っておりますので、それまでの間はプラグインダウンロードを閉鎖いたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「デッドリンクチェッカー」には新たに返信することはできません。