2

这是我从 Facebook 工程页面获得的示例代码。

<?php
if ($_POST['name']) {
?>
    <span>Hello, <?=$_POST['name']?>.</span>
<?php 
} else {
?>
<form method="post">
What is your name?<br>
<input type="text" name="name">
<input type="submit">
</form>
<?php
}

它说上面的代码不安全,因为它对跨站点脚本开放。正确的方法是通过 htmlspecialchars() 传递 $_POST['name']。但是,他们表示这是一种糟糕的编程习惯。

总是通过 htmlspecialchars() 传递 $_POST 变量效率低下?

我想不出任何方法来保证它的安全。他们介绍了我不愿意使用的 XHP。

参考:https ://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919

4

1 回答 1

0

正确的方法是通过 htmlspecialchars() 传递 $_POST['name']。但是,他们表示这是一种糟糕的编程习惯。

这本身并不是一个糟糕的做法。问题是,当您htmlspecialchars每次将文本内容放入 HTML 时都必须输入,您很可能会忘记一个,从而留下漏洞。

该页面所说的正确的是,最好有一种默认情况下HTML 转义的模板语言,这样您就不必考虑它了。这是目前大多数 Web 框架已经学到的一课,但是原始 PHP 仍然没有方便的方法来做到这一点。

于 2012-05-07T09:26:27.590 回答