PHPでCSRFを対策するために以下のようなコードを書いております。
php
1 2<?php if($_POST['posted']!="yes"):?> 3 <?php session_name('hoge');?> 4 <?php session_start();?> 5 <?php 6 $bytes = openssl_random_pseudo_bytes(16); 7 $_SESSION['token']=bin2hex($bytes); 8 ?> 9 10 <form class="" action="" method="post"> 11 <input type="hidden" name="posted" value="yes"> 12 <input type="hidden" name="csrf" value="<?php echo $_SESSION['token'];?>"> 13 14 </form> 15 16<?php endif;?> 17 18 19<?php 20 if($_POST['posted']=="yes"){ 21 session_start(); 22 $_POST['csrf']==$_SESSION['token']//false 23 } 24?>
CSRF対策とは関連がなく、念のためにセキュリティ上session_name()をPHPSSIDから変更するために
<?php session_name('hoge');?>を入れているのですが、このコードを入れてしまうことで$_POST['csrf']==$_SESSION['token']がfalseとなってしまいます。具体的には新たなトークンが生成されてしまい、不一致となるため、csrf対策とsession_name()の変更が両立いたしません。
*session_name()を変更することはセッションハイジャックに対して、重要な効果は期待されないと認識しておりますが、念のために変更したいと言う意図でございます。
原因と対応策について、アドバイスをいただけますでしょうか?
よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー