我甚至需要文本区域';s值


do I even need `htmlspecialchars()` for textarea's value

我有staff.php页面,其中包含员工的姓名、职位和详细信息。当用户需要编辑员工信息时,他们会被发送到edit.php页面。edit.php页面在text field上显示名称和标题,在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);?>" ...>