[英]Do I need to htmlspecialchars() user input in an HTML form to prevent XSS?
[英]prevent xss on input fields?
1-i具有一種形式,名稱為家庭電子郵件生日(可以選擇)和性別,這是兩個不同的單選按鈕,一個是男性,另一個顯然是女性。 現在請有人可以向我解釋一下如何防止在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-第二個問題是有必要轉義來自單選按鈕或Sellect選項的已發布數據,如果有必要,我應如何轉義它們?
3-i剛剛閱讀了有關htmlpurifier..now的信息,如果我有status字段,我可以更新該用戶,是否應該使用html purifier來顯示人員狀態,並且此注冊表格可能是?
提前致謝。
HTMLPurifier非常好,足以阻止XSS攻擊,這是使用它的方法。
# In register.php page: require_once 'path/to/HTMLPurifier/library/HTMLPurifier.auto.php'; $config = HTMLPurifier_Config::createDefault(); $config->set('HTML.Doctype', 'HTML 4.01 Transitional'); $config->set("HTML.Allowed", ""); // this will NOT allow any html tags $purifier = new HTMLPurifier($config); # hash the provided password (don't apply HTMLPurifier on the password) $hash_password = sha1($_POST["password"]); $data = array(); # apply HTMLPurify on all submitted data foreach ($_POST as $key => $value) { $data["$key"] = mysql_real_escape_string($purifier->purify($value)); } # get birthday $data["birthday"] = $data["year"] . "-" . $data["month"] . "-" . $data["day"]; # insert submitted data into your database $result = mysql_query(" INSERT INTO table_name (name, family, email, password, birthday, gender) VALUES ('{$data["name"]}', '{$data["family"]}', '{$data["email"]}', '$hash_password', '{$data["birthday"]}', '{$data["gender"]}') "); ?>
注意:使用male
和female
作為2個無線電輸入標簽的name
屬性的值,而不要使用gender[]
數組
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.