我有 staff.php
页面,其中包含员工的姓名、职位和详细信息。当用户需要编辑员工信息时,他们将被发送到 edit.php
页面.edit.php
页面在 text field
上显示名称和标题,在 textarea
我的问题是,我什至需要 edit.php
页面中的 htmlspecialchars
吗?我没有向用户页面打印任何内容,只打印那些字段。但是我在打印给用户之前,在 staff.php
上使用 htmlspecialchars
。
它是否仍然对XSS 攻击
开放?
代码
部分来自 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 标记,就需要它。
有必要调用 htmlspecialchars()
在放置在 <textarea>
中的 PHP 变量上.请考虑以下事项:
<?php
// Unsafe text in the variable
$detail4 = '</textarea><script>alert("XSS!");</script>';
?>
<textarea><?php echo $detail4; ?></textarea>
这导致关闭 </textarea>
随后是一个不安全的注入(inject)脚本(和另一个关闭 </textarea>
浏览器可能会忽略)。
还需要调用htmlspecialchars()
关于放入 value=""
的变量属性,选择适当的常量以确保变量中的内部引号被正确编码,以防止属性过早地以引号结束。如果您始终在属性上使用双引号,则可以接受默认值 ENT_COMPAT
, 但如果您有时用单引号引用属性,请使用 ENT_QUOTE
.
<input type='text' name='staff_pos' value="<?php echo htmlspecialchars($sub_title4, ENT_QUOTES);?>" ...>
关于php - 我什至需要 `htmlspecialchars()` 作为 textarea 的值吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29112000/