PHP プログラムの開発で、セキュリティの検討課題の箇条書きメモ
◆ https
WEBサーバー apache RewriteEngine の設定で、 http によるアクセスを https に転送させることができる
◆ hsts
hstsとは (HTTP Strict Transport Security)。
ブラウザにhttps プロトコルに限定されたサイトであることを HTTP headers で通知する手法
phpコードなら header("Strict-Transport-Security:max-age=63072000");
(WEBサーバー側で、https に転送していれば hsts は不要)
◆ php.ini
log_errors = On
error_log = /home/xxx/log/error_log
session.cookie_lifetime=0
session.use_cookies=On
session.use_only_cookies=On
session.use_strict_mode=On
session.cookie_httponly=On
session.cookie_secure=On
session.cookie_samesite="Strict"
session.gc_maxlifetime=1800
session.use_trans_sid=Off
session.cache_limiter=nocache
session.sid_length="48"
session.sid_bits_per_character="6"
session.hash_function="sha512"
参考 https://www.php.net/manual/ja/session.security.ini.php
◆ ユーザー新規登録での本人確認方法
メールアドレスの存在確認、電話番号の存在確認、公的認証による確認、第三者による認証or推薦
◆ ロボットからのログイン攻撃を防御
◆ パスワードの総あたり攻撃を防御
セッションにパスワードチェック失敗の回数と最後の時刻を記録しておく。
パスワード確認の前に、3回失敗の場合、一時間空けないとログインできないようにする。
◆ ログインパスワードの保管方法
◆ ログインのパスワード認証方法
◆ ログインの二要素認証
◆ ログイン履歴の保管
◆ ログイン後、過去のログイン履歴との照合
◆ クロスサイトスクリプティング(XSS)の防御
入力文字数、入力文字種のチェック(<,>,&,”,’を禁止する)
入力文字列をhtml出力するとき、スクリプトやhtmlタグにならないようにする。
◆ セッションタイムスタンプ管理
たとえば、セキュリティに敏感な内容を扱っているのなら、 セッションIDを15分毎に再生成 session_regenerate_id() する
◆ CSRF対策
ログインフォーム(アカウントとパスワード)には、対策をすること
方法:サーバーphpでワンタイムのCSRF対策トークン値を生成、適当なセッション変数に保存し、出力"html <form>"にも"<input type=hidden>"で送りつけておく、サーバーがGET/POSTを受信時に、保存したセッション変数と受信hidden値の一致を確認してから処理を進める
CSRF(Cross-Site Request Forgery) Cross-Site Request Forgery (CSRF) is an attack that forces an end user to execute unwanted actions on a web application in which they’re currently authenticated.
◆ パスワード変更
旧パスワードと新パスワードと新パスワード確認用
◆ SQLインジェクション対策
◆ javascript インジェクション対策
No comments:
Post a Comment