这是我从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 [&#39; name&#39;]。但是,他们表示编程实践很差。
总是通过htmlspecialchars()低效传递$ _POST变量吗?
我无法想办法让它变得安全。他们介绍了我不愿意使用的XHP。
参考:https://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919
答案 0 :(得分:2)
彻底阅读此链接,它将帮助您了解表单验证和安全目的 - http://phpsec.org/projects/guide/2.html
答案 1 :(得分:0)
正确的方法是通过htmlspecialchars()传递$ _POST ['name']。但是,他们表示编程实践很差。
这本身并不差。问题是,当您每次将文本内容放入HTML时都必须键入htmlspecialchars
时,您很可能会忘记一个,留下漏洞。
该页面正确地说,最好是使用默认情况下HTML-escape 的模板语言,这样您就不必考虑它了。这是大多数Web框架到目前为止所学到的教训,但原始PHP仍然没有方便的方法。