前提
例えば以下の様なコードでユーザーがログインした後を前提に、$_SESSION['user_id']
には1
が格納されているものとします。ajaxでこのユーザーidの結果を利用して、post.php
で MYSQL
の処理を実行したいと考えそれぞれのコードを作成して動かしてみました。想定通りの動作はしてくれるのですが、ここでふと疑問に思いました。
Javascript
上(クライアントサイド)においては
data:{'user_id':1,'content':content}
となっていて、このuser_idはユーザーが悪意のある値をいくらでも埋め込み送信できてしまうため、想定していないINSERT INTO
がpost.phpサイドで実行されてしまうと思いました。
従って、post.php
側で$_SESSION['user_id']
の値がdata:{'user_id': INT}
で受け取った値と一致していることを確認する、またはこの値に関しては、Javascript
(クライアントサイド)を経由せずに直接サーバーサイドだけでpost.php
側に$_SESSION['user_id']
の値(ここの例で言うと1)を渡さなければならないと考えました。
質問
一般的にこの様な場合、どの様にpost.php
に$_SESSION['user_id']
の値を正しく渡す、または一致を確認すべきなのでしょうか?
基礎的なことで申し訳ございませんが、よろしくお願い申し上げます。
php
1//main.php 2<?php 3session_start(); 4$_SESSION['user_id'] // 例えば1 5?> 6<body> 7 <input type="text" class="text_content" > 8 <button class="btn">送信</button> 9 10 11 <script> 12 $('btn').on('click',function(){ 13 var content = $('text_content').val(); 14 $.ajax({ 15 url:"post.php", 16 method:"POST", 17 data:{ 18 'user_id':<?php echo htmlspecialchar($_SESSION['user_id'],ENT_QUOTES);?>, 19 'content':content 20 } 21 }) 22 }).done((result)=>{ 23 // do something 24 }) 25 </script> 26 27<body>
php
1//post.php 2$get_user_id = filter_input(INPUT_POST,'user_id'); 3$get_content = filter_input(INPUT_POST,'content'); 4//各validation作業について中略 5 6//PDOによるMYSQL接続 中略 7$sql = "INSERT INTO test_table (id,content) VALUES (?,?)"; 8$stmt= prepare($sql); 9stmt->bindValue(1, $get_user_id, PDO::PARAM_INT) 10stmt->bindValue(2, $get_content, PDO::PARAM_STR) 11$flag = $stmt->execute(); 12//後略 13
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/09 13:45