2013-04-25 3 views
2

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

Например, один вар я использую как это:?

$querystring = $_SERVER['QUERY_STRING']; 
if(isset($_GET['semester']) && $_GET['semester'] != ''){ 
    $listxml = simplexml_load_file("http://path/to/webservice/?".str_replace('semester','term',$querystring)); 

Что происходит там, если QueryString имеет семестр = набор и не пустой, то я заменить его «термин» и пройти через запрос, как и к URL-адресу веб-службы (веб-служба использует переменную терминов, но переменная термина вмешивается в wordpress и перенаправляет на страницу сообщений для этого «термина» (тег/категория в WP), поэтому я передаю ее через WP в качестве семестра, а затем просто измените его на термин для вызова веб-службы.

Так что в этом случае я ничего не делаю с _GET, кроме передачи его как веб-сервис, что веб-служба делает с querystring из моих рук, но я должен «подготовить» его для них каким-либо образом?

-

У меня также есть случаи, подобные этим:

$display = '';  
if (isset($_GET['display'])) { 
    $display = $_GET['display']; //set sort via querystring 
} else { 
    $display = 'interest'; //set to default by interest 
} 

позже:

<div id='byalphabet' class='<?php global $display; if($display != 'alphabet'){echo 'hide';} ?>'> 

и

<div id="byinterest" class="<?php global $display; if($display != 'interest'){echo 'hide';} ?>"> 

-

Кроме того, используя для некоторой динамической JavaScript:

$view = ''; 
if (isset($_GET['view'])) { 
    $view = $_GET['view']; //set view via querystring 
} 

Позже:

<script> 
<?php if ($view != ''){ $view = str_replace('/','',$view); ?> 
jQuery('#<?php echo $view; ?>').trigger('click'); //activate view option accordion pane 
jQuery('html,body').animate({'scrollTop':jQuery('#<?php echo $view; ?>').offset().top - 50},500); //scrollTo view 
</script> 

-

Другие случаи включают в себя поиск массив для значения _GET array_search($_GET['major'], $slugs); и перенаправлять страницы с помощью:

$parts = explode('/',$_SERVER['REQUEST_URI']); 
Header("HTTP/1.1 301 Moved Permanently"); //SEO friendly redirect 
Header("Location: http://www.site.ca/programs/outline/".$parts[3]."/"); 

Ed Это: я прочитал многие из предложенных похожих вопросов, которые появились, но в основном они ссылаются на использование данных каким-то другим способом, например, на вставку в БД.

+1

'зрения =«); предупреждение (»XSS' и вы сделали – Gumbo

+0

@Gumbo Оно не похоже на работу - это возможно PHP автоматически изменяет?. кавычки к экранированию, потому что выход JS заканчивается «вместо», который разрушает атаку, т. е.: jQuery ('# \'); alert (\ 'XSS'). trigger ('click'); ' – tsdexter

+0

Или используя лучшая атака: '? view = '); alert (' XSS '); jQuery (' #' заканчивается 'jQuery ('# \'); alert (\ XSS \ '); jQuery (\' # ') .trigger ('click'); ', который также просто бросает ошибки JS - я не могу заставить его принять цитату, как есть с html-сущностью, процентом сущности или прямой цитатой char. Я знаю, что мне все еще нужно санировать но PHP автоматически выполняет кавычки? – tsdexter

ответ

2

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

<?php $view = $_GET['view'] ?> 
<script>jQuery('#<?php echo $view; ?>').trigger('click');</script> 

Для примера, приведенного выше кода, все нормально, если ?view=page_one, потому что ваш JavaScript выглядит jQuery('#page_one').trigger('click');.

Но что, если ваш QueryString является ?view=hacked%27)%3B%20alert(document.cookies)%3B%20jQuery(%27%23page_one - теперь ваш Javascript выглядит следующим образом на странице:

jQuery('#hacked'); alert(document.cookies); jQuery('#page_one').trigger('click'); 

alert() может так же легко быть запрос AJAX для отправки AUTH маркеры и т.д. на другой сервер ,

В конечном счете, тип дезинфекции зависит от контекста, в котором вы используете вход. В этом примере вам может потребоваться, чтобы вы избежали одиночных кавычек, например, но то, что подходит, может различаться между реализациями.

Хорошая статья на дезинфицирующих входов здесь: http://coding.smashingmagazine.com/2011/01/11/keeping-web-users-safe-by-sanitizing-input-data/

+0

спасибо за более полезный ответ, а затем комментарий выше. Я пробовал то, что вы предлагаете, и я не получаю предупреждения JS ... Я знаю, что мне все равно нужно санировать. Я проверю статью, спасибо. – tsdexter

+0

моя ошибка, я попробовал это на старой версии страницы без вида var. В новой версии он превращает «в», который по-прежнему разбивает JS и вызывает ошибку JS в консоли. 'Uncaught Error: ошибка синтаксиса, нераспознанное выражение: #hacked '); предупреждение ('привет'); jQuery ('# page_one' из строки: 'jQuery (' # hacked \ '); alert (\' hello \ '); jQuery (\' # page_one '). trigger (' click ');' – tsdexter

+0

Похоже, вы избегаете одиночных кавычек выше. Я также не видел ваш сайт или не тестировал свой код, это всего лишь пример возможной атаки. – doublesharp

Смежные вопросы