php - 我什至需要 `htmlspecialchars()` 作为 textarea 的值吗

标签 php xss htmlspecialchars

我有 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/

相关文章:

PHP:htmlentities 和 htmlspecialchars 不转换某些字符

php - mysql/php 中的多个计数

php - 如何防止php在页面刷新时提交短信?

php - 如何让 PHP 和 MySQL 在 IIS 7.0 上运行?

php - php mail() 表单有问题

javascript - 向服务器发送加密数据时 JavaScript 中的 XSS

php - 将 'utf-8' 参数添加到 htmlspecialchars() 的出现 - 它可以破坏任何东西吗?

java - 如何向 Hibernate Validator 添加无效模式?

c# - html 敏捷包 vs antixss

php - HTML POST 上的 htmlspecialchar 到带有数组和单个输入的 PHP 脚本