|
|
|
|
|
для: neadekvat
(05.12.2009 в 22:13)
| | Инициализация переменных в некоторых частных случаях, действительно, как бы, ненужна. Но это создаёт очень уж скользкое место. Поэтому для сколько-нибудь большого проекта можно считать инициализацию (или проверку на инициализированность) переменных обязательной.
Да и с позиций экономии времени и мышления значительно проще всё сразу иницилизировать. | |
|
|
|
|
|
|
|
для: Trianon
(05.12.2009 в 21:37)
| | За case null спасибо, даже не задумывался о таком варианте. | |
|
|
|
|
|
|
|
для: neadekvat
(05.12.2009 в 19:52)
| | Если Вы заранее в курсе, что переменная GET['act'] может быть не задана, то самое разумное - обработать это явно :
<?php
switch (@$_GET['act'])
{
case 'files': include ('files.php'); break;
case 'news': include ('news.php'); break;
case null: include ('main.php'); break;
default: exit('incorrect act value');
}
|
| |
|
|
|
|
|
|
|
для: neadekvat
(05.12.2009 в 19:52)
| | Но зато, если надо добаивть еще один модуль, то придётся что-то изменять в коде... У меня все модули хранятся в БД и я проверяю с этой переменной их существование, так что лучше проверять :)
ЗЫ. Fractured#, я пнимаю, что вы супер-мега программист, но вы ИМХО уже достали порядком людей своей "крутостью". Если вы такой крутой, что вы тут делаете? | |
|
|
|
|
|
|
|
для: Eugene77
(04.12.2009 в 12:52)
| | > 3) Инициализировать переменные
Это разве так страшно? В чем тут уязвимость?
Вот, к примеру, код:
<?php
switch ($_GET['act']) {
case 'files': include ('files.php'); break;
case 'news': include ('news.php'); break;
default: include ('main.php');
}
|
Согласитесь, $_GET['act'] может отсутствовать в принципе, интерпретатор при определенном уровне ошибок выведет предупреждение о несуществующей переменной, однако скрипт удачно продолжит работу и сделает то, что предписывает делать switch по дефолту.
Или вы предложите это?
<?php
if (isset ( $_GET{'act'] ) ) {
switch ($_GET['act']) {
case 'files': include ('files.php'); break;
case 'news': include ('news.php'); break;
}
} else {
include ('main.php');
}
|
Предупреждение исчезнет, и только. Читабельность, имхо, резко падает. | |
|
|
|
|
|
|
|
для: Eugene77
(05.12.2009 в 14:45)
| | Почитайте сайты посвященные хакингу, много полезного узнаете. | |
|
|
|
|
|
|
|
для: Trianon
(05.12.2009 в 13:24)
| | На всякий случай я везде ставлю такую проверку. (И считаю её обязательной)
Если даже библиотека с открытым кодом, то я её частенько немного подправляю.
Но дело не в этом.
В библиотеке могут оказаться функции, через которые можно будет что-то наковырять про мой сайт.
Я могу это не осознавать. И даже не хочу анализировать с этих позиций их текст максимально внимательно.
Достаточно того, что .inc файлы
1) Нельзя запустить через Апачи
2) Нельзя проинклудить чужим скриптом
3) Мои .php скрипты используют их аккуратно, следя за тем, чтобы не вызывать их с без проверки аргументов (если такая проверка не предусмотрена в самих функциях библиотек) | |
|
|
|
|
|
|
|
для: Eugene77
(05.12.2009 в 12:25)
| | >>немного не понял. для чего пункт 6? (поподробнее)
>6) При подключении файлов библиотек проверять наличие секретной константы в основном скрипте.
<?
>if(defined(SECRET_CODE_DEFINED_IN_ALL_MY_PHP_SCRIPTS))
|
>В том, что если всё-таки как-то удастся закинуть атакующий скрипт на ваш хостинг, он не сможет подключить конфиг базы итд.
Вы не делаете разницы между файлом конфигурации (с прватными данными) и файлом библиотеки (с открытым кодом) ? | |
|
|
|
|
|
|
|
для: psychomc
(04.12.2009 в 20:30)
| | >немного не понял. для чего пункт 6? (поподробнее)
Лучше обсуждения в отдельные темы отделять.
Попросим об этом модератора!
Но смысл у
6) При подключении файлов библиотек проверять наличие секретной константы в основном скрипте.
<?
if(defined(SECRET_CODE_DEFINED_IN_ALL_MY_PHP_SCRIPTS))
|
В том, что если всё-таки как-то удастся закинуть атакующий скрипт на ваш хостинг, он не сможет подключить конфиг базы итд.
Хотелось бы услышать ещё о мерах безопасности. Чтобы потом можно было всем давать ссылку на эту тему.
И не было разночтения между мастерами в смысле понимания того, что значит писать безопасно | |
|
|
|
|
|
|
|
для: Eugene77
(04.12.2009 в 12:52)
| | немного не понял. для чего пункт 6? (поподробнее) | |
|
|
|
|