初めまして!スタイル・エッジ システム事業部のMです。 業務ではPHPでの実装をはじめ、システム設計やチームマネジメントなど色々と経験を積んできています。 また、セキュリティ顧問になるべくセキュアコーディング面での技術向上と後輩エンジニアへの指導も行なっています。
今回はみなさん一度は作成したことのあるフォーム画面について、 少し似ている二つの攻撃とその対策についてお話しできればと思います。
今回扱うテーマ
- XSS(クロスサイトスクリプティング:Cross Site Scripting)
- CSRF(クロスサイトリクエストフォージェリ:Cross Site Request Forgery)
XSS
例えば、この攻撃に対する脆弱性があるサイトの
<script>alert('あなたの個人情報を取得しました。')</script>
をURLに含むリンクをクリックすると上記メッセージがポップアップで表示されます。
この場合は利用者に実害はないですが、それでも利用者を不安がらせ、サイト運営者への信頼を損なうことになります。
接続情報を取得するようなスクリプトであれば、第三者による不正アクセスも可能になってしまうため特に注意が必要です。
- 対策
対策としては以下が挙げられます。- フォームの値を画面に出力する際はhtmlspecialchars()などで特殊文字をエンティティに変換する
→画面上にはただの文字列として表示されるので、不正なスクリプトが実行されなくなります。 - CookieにHttpOnly属性を付与する
→JavaScript経由でCookieの値を取得できないようにします。
- フォームの値を画面に出力する際はhtmlspecialchars()などで特殊文字をエンティティに変換する
CSRF
概要 CSRFはwebページ内の特定の機能を意図せず実行させられる攻撃です。
SNS・掲示板に犯行予告の書き込みを行なってしまうなど、かつて大きな話題になりました。
この攻撃に対する脆弱性があるサイトにログインした状態のまま「『〇〇で△△する』と投稿する」URLのリンクをクリックした場合、
ログインしているユーザとしてその内容を投稿してしまいます。
つまり、攻撃者は他人の正規アカウントを利用して投稿を行うことができるのです。
身に覚えのないうちに犯罪予告をしてしまうなど、この攻撃により利用者が大きな被害を被る可能性があるので 運営者としては防いでおくべき攻撃の一つです。対策
対策としては以下が挙げられます。
まとめ
今回挙げた内容は数多くある攻撃・対策のほんの一部です。 この他にもSQLインジェクションやメールヘッダインジェクションなど、 フォームに関連するセキュリティ対策だけでも様々ありますので、 気になった方はぜひ調べてみてください!
最後に
スタイル・エッジ システム事業部では、一緒に働く仲間を募集しています。 もし興味を持っていただけましたら、ぜひ採用サイトものぞいてみてください!