ユーザまたはURLパラメータによって入力されたデータをフィルタリング/保護するときは、ちょっと混乱します。私はそれを入力と出力にフィルタリングする必要があります。または出力のみ?そして、もし私が出力だけでフィルターをかけると、データベースにデータを挿入している間、ユーザーがサーバー上でjavascriptなどを実行できるようになります。そして、それは異なっているべきですか?データベースの前または後のPHP/Mysqlデータのフィルタリング
// Secure the input/output
function filter_data($data) {
$data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
$data = strip_tags($data);
}
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$connect = mysqli_connect($servername, $username, $password, $db); // Create connection
if(!$connect){
echo "Error!!"; // Output error msg if connection fails.
}
// Data thats gone through validation, like string lenght, phone number only numbers etc.
$name = filter_data($_POST['name']);
$address = filter_data($_POST['address']);
$tlf = filter_data($_POST['tlf']);
// Inputting data
$query = "INSERT INTO `CV` (NAME, ADDRESS, TLF) VALUES ('$name', '$address', '$tlf')";
mysqli_query($connect, $query);
mysqli_close($connect); // Close the connection.
// Selecting data
$query = "SELECT * FROM `CV` ORDER BY `ID` DESC LIMIT 1";
$result = mysqli_query($connect, $query);
// Output data
while ($row = mysqli_fetch_assoc($result)) {
$name = filter_data($row["NAME"]);
$address = filter_data($row["ADDRESS"]);
$tlf = filter_data($row["TLF"]);
}
mysqli_free_result($result); // Free the result from memory.
mysqli_close($connect); // Close the connection.
echo $name;
echo $address;
echo $tlf;
まず、何がどのような状況で害を及ぼす可能性があるのかを特定します。そして、適切な対策を適用してください。データベースは、あなたが挿入する文字のどれかがHTMLで特別な意味を持つかどうかは気にしないので、その場所でhtmlspecialchars/strip_tagsは_wrong_になります。 strip_tagsはもちろん間違っています_everywhere_ - 私たちはここで入力したものにstrip_tagsを適用することは良いアイデアだと思っていたとしても、ここで最も基本的なコードの問題について議論することはできませんでした。 – CBroe