Jan 12, 2021

PHP セキュリティのメモ

 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