我什至需要 `htmlspecialchars()` 来获取 textarea 的值吗

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

我有 staff.php 页面,其中包含员工的姓名、职位和 detail.When 用户需要编辑员工信息,他们将被发送到 edit.php 页面。edit.php页面在 text field 上显示名称和标题,在 textarea

上显示详细信息

我的问题是,我什至需要 edit.php 中的 htmlspecialchars page.I 我没有向用户页面打印任何内容,仅在那个 fields.But 我正在使用 htmlspecialcharsstaff.php 打印给用户之前。

还开放给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);?>" ...>