【问题标题】:How to make $_POST more secured?如何让 $POST 更安全?
【发布时间】:2012-05-07 04:57:02
【问题描述】:

这是我从 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

【问题讨论】:

  • 我建议关注这个问题[停止 Sql 注入的最佳方法][1] [1]:stackoverflow.com/questions/60174/…
  • @MoyedAnsari 根本看不出这与 SQL 注入有什么关系。德里克,我建议你阅读这个 - blog.astrumfutura.com/2012/03/…
  • @Derek 另外,他们并没有说使用htmlspecialchars()糟糕的做法,只是可能使用一些逃脱的东西会更好默认情况下 HTML 输出。我会推荐 Twig 而不是 XHP 中的 echo 混乱。
  • 谢谢菲尔,我想我看错了。@MoyedAnsari 现在正在阅读。

标签: php security


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2017-02-02
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多