1-i には、名前、家族、電子メール、誕生日 (選択) と、性別 (1 つは男性用、もう 1 つは明らかに女性用) の 2 つの異なるラジオ ボタンがあるフォームがあります。今、誰かがPHPのこのフィールドへのxss攻撃を防ぐ方法を説明してもらえますか? 私のフォームデータはこのようなものです
<form action="register.php" method="post">
<div>
<table>
<tr><td><?php echo $lang['5']; ?> :</td><td> <input type="text" name="name" maxlength="254" class="required" /></td></tr>
<tr><td><?php echo $lang['6']; ?> :</td><td> <input type="text" name="family" maxlength="254" class="required" /></td></tr>
<tr><td><?php echo $lang['59']; ?> :</td><td> <input type="text" name="email" maxlength="254" class="required" /></td></tr>
<tr><td><?php echo $lang['74']; ?> :</td><td> <input type="text" name="repeat" maxlength="254" class="required" /></td></tr>
<tr><td><?php echo $lang['60']; ?> :</td><td><input type="password" name="password"/></td></tr>
<tr>
<td><?php echo $lang['8'] ?> :</td>
<td>
<select name="day">
<option><?php echo $lang['9'] ?></option>
<?php
for($i=1;$i<=31;$i++){
echo "<option value=\"{$i}\">{$i}</option>\n";
}
?>
</select>
<select name="month">
<?php
for($i=0;$i<=12;$i++){
$i = str_pad($i,2,"0",STR_PAD_LEFT);
echo "<option value=\"{$i}\">";T(1,$i);echo "</option>\n";
}
?>
</select>
<select name="year">
<option><?php echo $lang['11'] ?></option>
<?php
for($i=1300;$i<=1373;$i++){
if($i == $birthdate['0']){
echo "<option value=\"{$i}\" selected=\"selected\">{$i}</option>\n";
}else{
echo "<option value=\"{$i}\">{$i}</option>\n";
}
}
?>
</select>
</td>
</tr>
</table>
male : <input type="radio" name="gender[]" />female : <input type="radio" name="gender[]" /><br />
<input type="submit" name="submit" value="<?php echo $lang['63']; ?>" onclick="formhash(this.form, this.form.password);"/>
</div>
</form>
名前と家族について、このパターンでhtmlエンティティだけを取得するために、このようなことをしました
$name = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $name);
$family = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $family);
メールの場合は、次のようにしました。
$email = preg_replace("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,3})$^", "", $email);
この preg_replace は十分に安全ですか、それとも htmlentity または htmlspecailchars を使用する必要があるのでしょうか?
2-そして2番目の質問では、ラジオボタンまたはselectectオプションからの投稿データをエスケープする必要がありますか?必要に応じて、それらをどのようにエスケープする必要がありますか?
3-私は htmlpurifier について読んだところです。ステータス フィールドがある場合、どのユーザーを更新できますか?
前もって感謝します。