Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Вопросы по безопасности

Сообщения:  [1-10]    [11-20]   [21-30]  [31-34] 

 
 автор: acdcee   (21.05.2007 в 10:18)   письмо автору
 
   для: FireTiger   (11.05.2007 в 11:18)
 

stripslashes() - это убрать обратный слэш
htmlspecialchars() - это для работы с html-oм
addslashes - добавить обратные слешы к апострофам

если не использовать htmlspecialchars() там где надо то написав к примеру в $_POST['title']
alert('Script dead'); а еще и по циклом.... но хорошего будет мало а если через htmlspecialchars() то выведит просто alert('Script dead'); дальше ltrim а почему не trim и справа и слева в полне удобно....

preg_replace("/[^a-z0-9]/i", "", ltrim($_POST['title']) - лучше если это определить через условие

к примеру
if(preg_match("/[^a-z0-9]/i", $_POST['title']){
Header("Location:переносим куда надо");
exit;
}

"/[^a-z0-9]/i" - i это чтение или действие над строкой т.е переводит все буквы и бла бла бла в нижний регистер тоже самое что у тебя a-z

   
 
 автор: Trianon   (17.05.2007 в 10:21)   письмо автору
 
   для: Trianon   (17.05.2007 в 10:14)
 

А вообще, вот Вам мааааленькая задачка.
Нарисуйте форму с одним текстовым полем, в котором посетитель мог бы написать свое имя. Напишите обработчик, который бы записывал имя в таблицу БД, отвечал

Привет, имярек! Вы знаете, что в Вашем имени 6 символов? 
Сегодня нас посетили:

(вместо слова имярек выводя имя посетителя) и дальше бы построчно выводил список накопленных посетителей из таблицы вместе с количеством посещений.

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

NB: имя может содержать абсолютно любые символы.

   
 
 автор: Trianon   (17.05.2007 в 10:14)   письмо автору
 
   для: FireTiger   (16.05.2007 в 23:29)
 

>Ну так как? Можете подсказать что не так? Просто что-то не пойму, в чем здесь проблема...

>ltrim() - я использую для удаления пробелов с левой стороны слова.

А если эти пробелы нужны?

stripslashes() - использую для удаления обратных слэшей; насколько понимаю это для того чтобы не выполнялся perl скрипт;

Не зная, кто насовал в поле эти слэши?
А меж тем, stripslashes() далеко не все слэши удаляет.
Кто будет исполнять введенный текст, как perl-скрипт, где и зачем?
А если посетитель захочет показать другим посетителям текст perl-скрипта, ему что - удавиться прикажете?

>htmlspecialchars() - для запрета html-тегов, преобразовывает теги в их эквиваленты,
>например "<" в "&lt;" и т.п. и вообще не выполняет любые скрипты а просто их выводит как обычный текст.

Эта операция требуется при выводе текста, но никак не при вводе.
при вводе она только мешает.


>Я чувствую что что-то не так со stripslashes(). Объясните пожалуйста!
Еще бы Вы чувствовали так. Про magic quotes прочли?

   
 
 автор: FireTiger   (16.05.2007 в 23:29)   письмо автору
 
   для: Trianon   (13.05.2007 в 11:07)
 

Ну так как? Можете подсказать что не так? Просто что-то не пойму, в чем здесь проблема...

   
 
 автор: mc -aiZer-   (15.05.2007 в 19:36)   письмо автору
 
   для: FireTiger   (14.05.2007 в 16:56)
 

А если MySQL-иньекция, то нужна addslashes() или mysql_escape_string().

   
 
 автор: mc -aiZer-   (15.05.2007 в 04:13)   письмо автору
 
   для: Unkind   (12.05.2007 в 20:16)
 

Лично я предпочитаю:

<?php 
$_GET
['page'] = intval($_GET['page']); 
?> 

   
 
 автор: provodnik   (14.05.2007 в 23:59)   письмо автору
 
   для: FireTiger   (14.05.2007 в 16:56)
 

Я использовал в галерее изображений такое:

<?
//если ввели путь к несуществующему файлу
if($_FILES["logo"]["name"] != "" and $_FILES['logo']['size'] == "0")
{
    echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='3; URL=http://"$_SERVER['HTTP_HOST'] ."/photo/add/'></HEAD></HTML>";
    echo 
"<br /><center><strong>Нет у вас заявленной картинки на жестком диске</strong></center> <BR>";
    
$errors 1;
    exit ();
}    

if(
$_FILES["logo"]["name"] != "" and $_FILES['logo']['size'] > "0")
{
    
// определяем допустимые расширения
    
$valid_types=array("gif","jpg","png","jpeg"); 
    
// определяем имя файла    
    
$f_name $_FILES['logo']['name'];
    
// Запоминаем размер файла            
    
$f_size=$_FILES['logo']['size'];                 
    
    
// проверяем расширение файла
    
$ext strtolower(substr($f_namestrrpos($f_name".")));
    if (!
in_array($ext$valid_types))
    {
        
$errors "1";
        echo 
"Имя загружаемого файла имеет некрасивое расширение";
        exit ();
    }
    
    
// недопускаем использование в имени файла более одной точки
    
$t4k substr_count($f_name".");
    if (
$t4k "1")
    {
        echo 
"<center><strong>Не допускается использование нескольких точек в имени файла...</strong></center> <BR>";
        
$errors "1";
        exit ();
    }

    
// недопускаем использование в имени файла некрасивых дополнительных расширений 
    
$mess="<center><strong>Имя файла должно иметь расширение изображения...</strong></center><br />";
    if (
preg_match("/\.php/i",    $f_name)) {echo $mess$errors 1; exit ();}
    if (
preg_match("/\.html/i",    $f_name)) {echo $mess$errors 1; exit ();}
    if (
preg_match("/\.htm/i",    $f_name)) {echo $mess$errors 1; exit ();}
    if (
preg_match("/\.php3/i",    $f_name)) {echo $mess$errors 1; exit ();}
    if (
preg_match("/\.shtml/i",$f_name)) {echo $mess$errors 1; exit ();}
    if (
preg_match("/\.cgi/i",    $f_name)) {echo $mess$errors 1; exit ();}
    if (
preg_match("/\.pl/i",    $f_name)) {echo $mess$errors 1; exit ();}
    if (
preg_match("/\.asp/i",    $f_name)) {echo $mess$errors 1; exit ();}

    
// проверка веса файла
    
$max_size "307200"// допустимый вес - 300 килобайт
    
$f_kb_size=round($f_size/10.24)/100;
    
$f_size_max=round($max_size/10.24)/100;
    if (
$f_kb_size>$f_size_max)
    {
        
$errors 1;
        echo 
"Превышено ограничение на вес файла";
        exit ();
    }
}
?>

Авось пригодится...

   
 
 автор: FireTiger   (14.05.2007 в 16:56)   письмо автору
 
   для: Trianon   (13.05.2007 в 11:07)
 

В книжку после вашего сообщения специально не смотрел чтобы проверить мое понимание этих функций.
ltrim() - я использую для удаления пробелов с левой стороны слова.
stripslashes() - использую для удаления обратных слэшей; насколько понимаю это для того чтобы не выполнялся perl скрипт;
htmlspecialchars() - для запрета html-тегов, преобразовывает теги в их эквиваленты, например "<" в "&lt;" и т.п. и вообще не выполняет любые скрипты а просто их выводит как обычный текст.
Я чувствую что что-то не так со stripslashes(). Объясните пожалуйста!

   
 
 автор: Trianon   (13.05.2007 в 11:07)   письмо автору
 
   для: FireTiger   (12.05.2007 в 23:29)
 

Думаю, что ничего, из того, что тут говорилось, Вы не поняли.
А теперь, прямыми словами (только собственными, а не из книжки) ответьте пожалуйста, что и зачем делает каждая из функций в Вашем коде

htmlspecialchars(stripslashes(ltrim(
?

   
 
 автор: FireTiger   (12.05.2007 в 23:29)   письмо автору
 
   для: Trianon (из кабака)   (12.05.2007 в 22:52)
 

Что ты имеешь ввиду? Можно прямыми словами?

   

Сообщения:  [1-10]    [11-20]   [21-30]  [31-34] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования