Как сделать $ _POST более защищенным?

Это пример кода, который я получил на странице Facebook Engineering.

<?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 } 

В нем говорится, что вышеуказанный код не защищен, потому что он открыт для межсайтового скриптинга. правильным способом является передача $ _POST ['name'] через htmlspecialchars (). Однако они заявили, что это плохая практика программирования.

Всегда передается переменная $ _POST с помощью htmlspecialchars () неэффективна?

Я не могу придумать, как это сделать. Они внедряют XHP, которые я неохотно использую.

Ссылка: https://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919

Прочтите эту ссылку, чтобы она помогла вам проверить форму и обеспечить безопасность – http://phpsec.org/projects/guide/2.html

правильным способом является передача $ _POST ['name'] через htmlspecialchars (). Однако они заявили, что это плохая практика программирования.

Это не плохая практика сама по себе. Проблема в том, что когда вам приходится вводить htmlspecialchars каждый раз, когда вы htmlspecialchars текстовый контент в HTML, вы, скорее всего, его забудете, оставив уязвимость.

То, что эта страница говорит правильно, заключается в том, что лучше иметь язык шаблонов, который HTML-экраны по умолчанию , так что вам не нужно об этом думать. Это урок, который большинство веб-фреймворков уже изучили, но у сырого PHP по-прежнему нет удобного способа сделать это.