2013-09-03 5 views
2

Я не знаю много о PHP, поэтому простите мое невежество. Я пытаюсь ввести значение параметра, введенное в область администрирования Joomla, чтобы добавить строку в мой контейнерный класс bootstrap, чтобы изменить страницу с фиксированного на жидкий макет.Защита PHP при получении значения параметра

Я извлекая значение, как это ...

$conType = $this->params->get('conType',''); 

, а затем просто установить его следующим образом ...

class="container<?php echo "$conType"; ?> 

Однако, я волновался (зная очень мало о PHP) если это проблема безопасности, поскольку любое значение может быть установлено как $ conType - это проблема? Если да, то это будет работать ...?

$conType = (int) $this->params->get('conType','0'); 

if($conType == "1") 
{ 
$conType = "-fluid"; 
} 
else 
{ 
$conType = ' '; 
} 

А затем просто повторите его снова. Это необходимо? Есть ли способ лучше?

+1

Это всегда лучше, чтобы убедиться, что данные, которые вы используете, что вы ожидаете. – JimL

+0

Вы также можете использовать htmlspeciachars() - прочитать это сообщение для получения дополнительной информации: http://stackoverflow.com/questions/46483/htmlentities-vs-htmlspecialchars – Grant

ответ

3

Да, это будет работать и безопасно.

Если $ conType может быть какой-либо параметр, то важно, чтобы избежать его от XSS, используя htmlentities():

echo htmlentities($conType) 

, как вы сделали это еще лучше, хотя это стоит больше усилий. ;-)

Не забудьте использовать htmlentities в будущем, если вам нужно экранировать множество параметров, а не только одну небольшую настройку. И как совет, пожалуйста, сообщите о php и безопасности, прежде чем продолжить разработку php-приложений (если вы планируете). Как веб-разработчик (особенно как разработчик php) вы действительно должны знать о таких типах, как «XSS», «SQL Injection» и «CSRF». :-)

[В качестве альтернативы htmlentities, есть htmlspecialchars, которая кодирует меньше символов, см htmlentities() vs. htmlspecialchars() для сравнения]

+0

Спасибо, это значительно добавлено в мой список чтения за день :-) – user2317093

+0

В общем, вы хотите использовать как HTML-экранирование (на * все * выходные переменные, явно не предназначенные для разметки), так и проверку ввода (для обеспечения правильности больше, чем в качестве меры безопасности, хотя это тоже помогает). – bobince

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