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 にドロップするたびに入力しなければならない場合、1 つ忘れる可能性が非常に高く、脆弱性が残ることです。

そのページが正しく言っていることは、デフォルトで HTML エスケープするテンプレート言語を使用する方がよいということです。そうすれば、それについて考える必要はありません。これは、ほとんどの Web フレームワークがこれまでに学んだ教訓ですが、生の PHP には、これを行うための便利な方法がまだありません。

于 2012-05-07T09:26:27.590 に答える