我有staff.php页面,其中包含员工的姓名,职位和详细信息.当用户需要编辑员工信息时,他们将被发送到edit.php page.edit.php页面显示文本字段上的名称和标题以及textarea上的详细信息
我的问题是,我甚至需要在edit.php页面中使用htmlspecialchars.我不打印任何内容到用户页面,只在那些字段上打印.但是我在staff.php上使用htmlspecialchars,然后打印给用户.
它仍然对XSS Attack开放吗?
码
部分来自staff.php
$staff.="<div id='sob'>".htmlspecialchars($title)."<br>".htmlspecialchars($sub_title)."<div><a href='edit.php?pid=".htmlspecialchars($pro_id)."'><input type='submit' id='editx' name='editx' value='Edit'></a></div><div id=''><br>".htmlspecialchars($detail)."</div><hr id='h'></div>";
部分来自edit.php
if(isset($_GET["pid"])){
$name4=$title; //
$sub_title4=$sub_title; //using prepared statement
$detail4=$detail; //
}
HTML part at edit.php
<input type='text' id='staff_name' name='staff_name' value="<?php echo $name4;?>" required>
</br><input type='text' id='staff_pos' name='staff_pos' value="<?php echo $sub_title4;?>" required>
</br><textarea id='staff_detail' name='staff_detail' cols='30' rows='6' required><?php echo $detail4;?></textarea></br>
解决方法:
当要在屏幕上显示变量时,不仅需要防止XSS;每当用户生成的值用于构建HTML标记时,无论上下文如何,都需要它.
有必要在放置在< textarea>内的PHP变量上调用htmlspecialchars().考虑以下:
<?php
// Unsafe text in the variable
$detail4 = '</textarea><script>alert("XSS!");</script>';
?>
<textarea><?php echo $detail4; ?></textarea>
这导致关闭< / textarea>然后是一个不安全的注入脚本(另一个结束< / textarea>浏览器可能会忽略).
还需要对置于value =“”属性中的变量调用htmlspecialchars(),选择适当的常量以确保变量中的内部引号被正确编码,以防止属性过早地以引号结束.如果始终对属性使用双引号,则可以接受默认的ENT_COMPAT,但如果有时引用带单引号的属性,请使用ENT_QUOTE.
<input type='text' name='staff_pos' value="<?php echo htmlspecialchars($sub_title4, ENT_QUOTES);?>" ...>