User Tools

Site Tools


ja:rule:ser:無用なserialize:unserialize_は利用しない

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ja:rule:ser:無用なserialize:unserialize_は利用しない [2016/12/28 03:35] – created yohgakija:rule:ser:無用なserialize:unserialize_は利用しない [2017/10/25 08:10] (current) yohgaki
Line 1: Line 1:
 ====== 外部データにserialize/unserialize_は利用しない ====== ====== 外部データにserialize/unserialize_は利用しない ======
  
-PHPのserialize/unserialize関数は安全なデータストレージなどにPHP変数を保存する為に利用します。一旦、外部に保存されたデータ($_POST、$_GET、$_COOKIEなど)は改ざんされ、unserialize時に不正なデータとなっている可能性があります。この結果、不正な値に改ざんされたり+PHPのserialize/unserialize関数は安全なデータストレージなどにPHP変数を保存する為に利用します。一旦、外部に保存されたデータ($_POST、$_GET、$_COOKIEなど)は改ざんされ、unserialize時に不正なデータとなっている可能性があります。この結果、不正な値に改ざんされたり、不正なオブジェクトを注入されたり、メモリ管理の不具合(解放済みアドレスの利用など)による任意コード実行が行われたりします。 
 + 
 +<note important>現在のPHP(2017年9月以降)では不正なシリアル化データによるメモリ管理の不具合はセキュリティ問題として修正されません。 
 +</note> 
  
 ===== 非適合コード例 ===== ===== 非適合コード例 =====
  
-[ルール/推奨事項に適合しないコードおよびそ解説複数い。]+<code php> 
 +$mydata = unserialize($_GET['mydata']); 
 +</code> 
 + 
 +===== 適合コード例 (JSON利用) ===== 
 + 
 +JSONを利用する場合、不正なオブジェクトの注入は不可能になり、メモリ管理の不具合のリスクはほぼ無くなります 
 + 
 +<code php> 
 +$mydata = json_decode($_GET['mydata']); 
 +</code> 
 + 
 +<note important>データの改ざんは可能でる点に注意</note> 
 + 
 +===== 適合コード例 (HMACなどの利用) ===== 
 + 
 +HMACやHKDFで改ざんされていないこと検証している場合、信頼可能である 
 + 
 +<code php> 
 +if ($_GET['mac'] && $_GET['mac'] === hash_hmac('sha3-512', $_GET['mydata'], $_SESSION['hmac_key']) { 
 +    throw new Exception('$_GET[mydata] is modified by user'); 
 +
 + 
 +$mydata = json_decode($_GET['mydata']); 
 +</code>
  
-===== 適ド例 =====+この例の場、HMACで改ざんを検出しているので不正なデタやオブジェクト、攻撃用データが挿入されていないことを保証できる。
  
-[ルール/推奨事項適合すコードおよびその解説。複数あって構わない。その場合、セクション名の後"(適合パターン名)"を記述する。]+<note warning>ただし、再生攻撃対して脆弱であ注意する</note>
  
 +<note tip>HKDFを利用し、$info引数に有効期限を設定すると再生攻撃リスクを緩和可能である</note>
  
 ===== 例外 ===== ===== 例外 =====
ja/rule/ser/無用なserialize/unserialize_は利用しない.1482896130.txt.gz · Last modified: 2016/12/28 03:35 by yohgaki

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki