我甚至需要`htmlspecialchars()`来获得textarea的值

Cod*_*der 3 php xss htmlspecialchars

我有一个staff.php页面,其中包含员工的姓名,职位和详细信息.当用户需要编辑员工信息时,他们将被发送到edit.php页面.edit.php页面显示名称和标题text field以及详细信息textarea

我的问题是,我是否甚至需要htmlspecialcharsedit.php页面中.我不打印任何内容到用户页面,只在那些字段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>";
Run Code Online (Sandbox Code Playgroud)

部分来自 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>
Run Code Online (Sandbox Code Playgroud)

Mic*_*ski 7

当要在屏幕上显示变量时,不仅需要防止XSS ; 每当用户生成的值用于构建HTML标记时,无论上下文如何,都需要它.

需要调用htmlspecialchars()在其中放入一个PHP变量<textarea>.考虑以下:

<?php
    // Unsafe text in the variable
    $detail4 = '</textarea><script>alert("XSS!");</script>';
?>

<textarea><?php echo $detail4; ?></textarea>
Run Code Online (Sandbox Code Playgroud)

这导致关闭,</textarea>然后是不安全的注入脚本(另一个关闭</textarea>浏览器可能会忽略).

还需要调用htmlspecialchars()放入value=""属性的变量,选择适当的常量以确保变量中的内部引号被正确编码,以防止属性过早地以引号结束.如果您始终对属性使用双引号,则可以接受默认值ENT_COMPAT,但如果您有时引用带单引号的属性,请使用ENT_QUOTE.

<input type='text' name='staff_pos' value="<?php echo htmlspecialchars($sub_title4, ENT_QUOTES);?>" ...>
Run Code Online (Sandbox Code Playgroud)