しばらくの間、自分のウェブサイトでコメント ボックス機能を使用していましたが、昨日まではすべてが素晴らしかったのですが、私のウェブサイトに通常とは思えない奇妙なコメントが表示されることに気付きました。ここでの私の質問は、SQL インジェクション攻撃や悪意のあるスパムなどを防ぐ方法です。
私は PHP の専門家ではありませんが、sth があると確信しています。セキュリティの観点から私のコードに欠けています。
値が空でないか、乱暴な言葉が含まれていないか、特定の長さであるかなどを確認するためのいくつかの基本的な検証関数を導入しました。
攻撃に対してより安全にするために、以下のコードで他に何を改善できますか?
<?php
session_start();
require('execute.php');
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
if(empty($_POST['name']))
{echo '<p style="color:red;"><b>Please provide a valid name</b></p>';}
else
{
$fn = mysqli_real_escape_string($dbc, trim($_POST['name']));
}
if(empty($_POST['comment']))
{echo '<p style="color:red;"><b>Please provide a valid comment</b></p>';}
else
{
$cm = mysqli_real_escape_string($dbc, trim($_POST['comment']));
}
$minimum_n = '/[a-zA-Z]{3,}/';
if(!preg_match($minimum_n, $_POST['name']))
{$_POST['name'] = NULL; echo '<p style="color:red;"><b>Your name is too short or has incorrect format</b></p>';}
$minimum_c = '/[a-zA-Z]{5,}/';
if(!preg_match($minimum_c, $_POST['comment']))
{$_POST['comment'] = NULL; echo '<p style="color:red;"><b>Your message is too short or in incorrect format</b></p>';}
$pattern = '/(shit|crap|http|href)(s|ed|ing|ty|off)?/i'; /* Removed offensive words */
if(preg_match($pattern, $_POST['name']))
{$_POST['name'] = NULL; echo '<p style="color:red;"><b>You have chosen inappropriate nickname. Please use a different one</b></p>';}
if(preg_match($pattern, $_POST['comment']))
{$_POST['comment'] = NULL; echo '<p style="color:red;"><b>You have used inappropriate word(s) in your message</b></p>';}
if(!empty($_POST['name']) && !empty($_POST['comment']))
{
require('execute.php');
$q = "INSERT INTO comment (name, comment, date)
VALUES ('$fn', '$cm' ,NOW())";
$r = mysqli_query($dbc, $q);
mysqli_close($dbc);
}
}
?>
</div>
<div class="container_16 grid_8 alpha lefter">
<?php
session_start();
require('execute.php');
$q = "SELECT * FROM comment ORDER BY user_id DESC";
$r = mysqli_query($dbc, $q);
while($row = mysqli_fetch_array($r, MYSQLI_ASSOC))
{
echo "<p>" . ''. "<b>" . ' ' . $row['id']. ' ' . $row['name'] . ' ' . "</b>". ' ' . $row['comment']. ' ' . $row['date'] . ' ' . "</br>";
}
?>