Защита от XSS. Как?

12
seosniks
На сайте с 13.08.2007
Offline
389
1148

Добрый вечер прогеры.

Посоветуйте пожалуйста как нормально реализовать код.

Задача такая.

есть строка вида

index.php?razdel=news

и проверка данных

if(!preg_match("/^[a-zA-Z._0-9]+$/", $_GET['r'])){

echo "ERR";
}

все работает как надо. Но если набрать site.ru/ndex.php

или же

site.ru. Выдает ошибку из за того что $_GET['r'] ничего не возвращает.

Получается что надо проверять через isset/

Помогите пожалуйста. Спасибо.:beer:

BE
На сайте с 09.07.2008
Offline
28
#1
seosniks:
Получается что надо проверять через isset/

ИМХО, это будет лучшим вариантом:)


if(isset($_GET['r']) && !preg_match("/^[a-zA-Z._0-9]+$/", $_GET['r'])){
echo "ERR";
}
BlackEvil, Rest In Peace...
T.R.O.N
На сайте с 18.05.2004
Offline
314
#2
seosniks:
проверка данных

а накой Вы проверяете?????

seosniks:
Но если набрать site.ru/ndex.php

по такому запросу должна выдаваться ошибка 404. почему этого не происходит?

И что из приведенного является защитой от XSS????

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
NZ
На сайте с 20.09.2009
Offline
12
#3

Так чем же не устраивает проверка через isset? Не могу понять.

Например, ежели, переменная неактивная, то присваиваем ей значение "news" (.



if (isset($_GET['r'])) {
if(!preg_match("/^[a-zA-Z._0-9]+$/", $_GET['r'])){
echo "ERR";
}
}
else {
$_GET['r'] = "news";
}

Ну, вот, к примеру, так может?

NZ
На сайте с 20.09.2009
Offline
12
#4

У BlackEvil рациональнее :)

ixRock
На сайте с 14.11.2006
Offline
46
#5

экранировать все вредоопасные символы, проверять строку на соответствие ну и конечно + делать редирект на все несуществующие страницы через .хтацесс, например так:

ErrorDocument 404 /err404.html

и да поможет вам гугл!)

Работаю [S]за еду и секас[/S] с XHTML, CSS, XSLT, JS, PHP. Если что, вот тут (http://www.mintdesign.ru/) некоторые мои работы. Контакты: ася 344-ноль86-276, мыло ixrock@gmail.com
T.R.O.N
На сайте с 18.05.2004
Offline
314
#6

NutZ, такой вариант, сам по себе - кривой. Тогда получается, что у страницы index.php?razdel=news появляется копия index.php

NZ
На сайте с 20.09.2009
Offline
12
#7



if (isset($_GET['r'])) {
if(!preg_match("/^[a-zA-Z._0-9]+$/", $_GET['r'])){
echo "ERR";
}
}
else {
$_GET['r'] = "news";
// Ну или Header("Location: error404.php");
}

NutZ добавил 22.09.2009 в 17:11

T.R.O.N, тогда редирект в помощь.

NutZ добавил 22.09.2009 в 17:15

Хм, а если разделы статичиские, то почему бы просто не сделать след. образом:


switch ($r) {
case "news":
include("news.php");
break;
case "news1":
include("news1.php");
break;
case "news2":
include("news2.php");
break;
}

Ну, это образно. Инклюд или не инклюд, не знаю, почему бы этот вариант не рассмотреть?

T.R.O.N
На сайте с 18.05.2004
Offline
314
#8

Всеравно какйто бред. Какое отношение это все имеет к защите от XSS? В самом страшном случае, XXS грозит страницам поиска, и то, если писал их ленивый. Ничего не понимаю...

NZ
На сайте с 20.09.2009
Offline
12
#9

T.R.O.N, Вы это в целом о задаче? То есть не понятен смысл проблемы?

T.R.O.N
На сайте с 18.05.2004
Offline
314
#10

NutZ, безусловно. Если не делать такой проверки как у Вас, то чего Вы опасаетесь?

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий