вот подумал если я - неопытный пхп-программист работаю над своим проектом , cms-подобный и не хочу чтобы меня "похакали" на первый же день существования сайта , то я должен все входящие данные в скрипт проверять на наличие неуместных символов и т.д. и проверяем это с помощью (пример того как я делал это): PHP: <? $code = strip_tags(htmlspecialchars(stripslashes($_POST["code"]))); ?> извините , но фак! как же много всего ! а ещё если с большим кол-вом переменных... и вот если подобную реализацию делать , то не легче делать это в index.php ? PHP: <? foreach($_POST as $key=>$value) { $_POST[$key]=strip_tags(htmlspecialchars(stripslashes($value))); } foreach($_GET as $key=>$value) { $_GET[$key]=strip_tags(htmlspecialchars(stripslashes($value))); } ?> ??? или все так и делают , а я вот только придумал ? =) ну и конечно ещё определённые данные приводим к тому самому определённому типу , но мне как неопытному человеку не хочется бояться за то что я где-то забуду чтото поставить и хочу быть уверен что похакиваний не будет
Еще есть очень нужная вещь, такая как mysql_real_escape_string() А если $_POST и $_GET у вас передают числовые значения, типо id, то используется еще (int)$_POST А вы уверены, что данная проверка всегда будет поключена, или имена переменных будут совпадать?
И все же, как вы собираетесь делать данную проверку универсальной, чтоб вызвать ее можно было откуда угодно?
Ну какбы у меня лично всё обрабатывает 1 файл - index.php и в нём инклудятся остальные файлы. любая страница сайта работает через index.php ну и вот пример как будет работать index.php PHP: <?php echo "header"; foreach($_POST as $key=>$value) { $_POST[$key]=strip_tags(htmlspecialchars(stripslashes($value))); } foreach($_GET as $key=>$value) { $_GET[$key]=strip_tags(htmlspecialchars(stripslashes($value))); } echo "content"; if(count($_POST)!=0) echo print_r($_POST); echo "<br/>footer"; include('post.php'); ?> post.php PHP: <?php echo "<br/>post.php included!<br/>"; if($_POST['submit']) { echo $_POST['posttest']; } ?> <form method="post"> <input type="text" name="posttest" /> <input type="submit" name="submit" value="submit" /> </form>
siiXth а я тоже такую хрень забубенил - надоело, понимаешь PHP: <?php // // <editor-fold defaultstate="collapsed" desc="strget - берет искомый элемент из массивов POST или GET и приводит его к String указанной длинны"> static function strget($str='', $length = 255) { if (isset($_POST[$str])) { return trim(substr(trim($_POST[$str]), 0, $length)); } if (isset($_GET[$str])) { return trim(substr(trim($_GET[$str]), 0, $length)); } return false; } // </editor-fold> // // <editor-fold defaultstate="collapsed" desc="intget - берет искомый элемент из массивов POST или GET и приводит его к Integer"> static function intget($str='') { if (isset($_POST[$str])) { return intval($_POST[$str]); } if (isset($_GET[$str])) { return intval($_GET[$str]); } return false; } // </editor-fold> но стрипать таги заранее - не надо. =)
siiXth а может они нужны =) может так оно и было задумано. зачем ты нападаешь на таги. таги такой же текст как и все! всю вот эту хрень надо бы убрать strip_tags(htmlspecialchars(stripslashes и применять только там где надо. почему ты их боишься?
та не боюсь - экономлю время! =) а так же буду уверен что ниодин sqlinj не пробьётся никуда )) и у тебя обрезание 250 символов . а если это textarea и юзер много-много может написать о себе ?
siiXth ты от инъекции как раз ничерта не защитился siiXth и у тебя обрезание 250 символов таким образом задается дефолтное значение. т.е. если второй параметр функции НЕ будет указан - то 255 это будет максимум. А если будет - то все будет как требуется. Ты не знаком с дефолтными значениями? =)
siiXth оно не должно стоять в классе или где-то еще. эта функция должна применяться строго при создании запроса. Это не значит что она должна стоять в той же строке. Это значит, что после применения этой функции с переменной больше ничего не должно происходить. Т.к. если ты изменишь значение переменной частично, то надо будет прогнать ее через эскейпилку вторично, что может "заэскейпить заэскейпленное" и конфуз выйдет.
ну в общем понятно раз говорите не долбать се мозги этим делом , то так и будем делать тоесть на входящие данные я смело кидаю strip_tags(htmlspecialchars(stripslashes и уже ПОСЛЕ того как обработал переменную перед запросом кидаю ни них все mysql_real_escape_string всё тру ? больше ничего не понадобится ?