Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Данные посещений в файлах, Как хранить пользовательские данные в фалах
sg.com  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 234
Пользователь №: 42899
На форуме: 9 лет, 17 дней
Карма: 4




Что-то вроде такого написал, вопрос как легко убрать уязвимость? по идее можно закрыть строку, если подменить заголовок и там что то прописать

// Запись запроса по GET
public static function setQueryGet( $id, $url, $referer, $get )
{ // все из $_SERVER
$time = date("d-M(H:i:s)");

if( !empty($get) )
$get = base64_encode( serialize($get) );

$string = 'parent='. $id
.' path='. $url
.' referer='. $referer
.' get='. $get
.' time='. $time
."\n"; // пробелы для разделения

self::writeFile( $id, $string, 'get' );
}

// Метод создания и записи в файл
public static function writeFile( $id, $string, $mod )
{
$last = date("Y-m");
$path = self::root . self::path .'/'. $id .'/'. $last .'-'. $mod;

file_put_contents( $path, $string, FILE_APPEND );
}


Это сообщение отредактировал sg.com - 6.04.2025 - 23:15
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 698
Пользователь №: 39616
На форуме: 11 лет, 1 день
Карма: 71




Цитата (sg.com @ 6.04.2025 - 23:02)
как легко убрать уязвимость?

Какую?

Цитата (sg.com @ 6.04.2025 - 23:02)
по идее можно закрыть строку, если подменить заголовок и там что то прописать

Пример можешь привести?


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 234
Пользователь №: 42899
На форуме: 9 лет, 17 дней
Карма: 4




к примеру, в $agent будет какой либо код который поломает логику, примера не знаю и не уверен как оно может работать, но чисто теоретически. Возможно ли по параметру $get закрыть ф. serialize раньше времени. Перечитал с 10 статей, конкретики мало пишут, все в общих чертах, что заголовки легко подменить на что угодно. Может все данные пропускать через ф. base64_encode и serialize, или json_encode?

Это сообщение отредактировал sg.com - 7.04.2025 - 11:44
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
brevis  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 698
Пользователь №: 39616
На форуме: 11 лет, 1 день
Карма: 71




Хранить данные в файлах достаточно просто в plain text, ну или в json для удобства.

>подменить заголовок и тд
А работать с данными нужно по тем же принципам, что и при работе с данными из других storage.


--------------------
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
alexr23  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 46759
На форуме: 1 месяц, 1 день
Карма: 1




Цитата (sg.com @ 6.04.2025 - 23:02)
Что-то вроде такого написал, вопрос как легко убрать уязвимость? по идее можно закрыть строку, если подменить заголовок и там что то прописать

// Запись запроса по GET
    public static function setQueryGet( $id, $url, $referer, $get )
    { // все из $_SERVER
        $time = date("d-M(H:i:s)");
       
        if( !empty($get) )
            $get = base64_encode( serialize($get) );
       
        $string = 'parent='. $id
                .' path='. $url
                .' referer='. $referer
                .' get='.  $get
                .' time='. $time
                ."\n"; // пробелы для разделения

        self::writeFile( $id, $string, 'get' ); 
    }

// Метод создания и записи в файл
    public static function writeFile( $id, $string, $mod )
    {
        $last = date("Y-m");
        $path = self::root . self::path .'/'. $id .'/'. $last .'-'. $mod;
       
        file_put_contents( $path, $string, FILE_APPEND );
    }

public static function setQueryGet($id, $url, $referer, $get) {
// Валидация URL и Referer
if (!filter_var($url, FILTER_VALIDATE_URL)) {
throw new Exception("Invalid URL");
}
if (!empty($referer) && !filter_var($referer, FILTER_VALIDATE_URL)) {
throw new Exception("Invalid Referer");
}

// Очистка управляющих символов
$url = str_replace(["\n", "\r", "\t"], '', $url);
$referer = str_replace(["\n", "\r", "\t"], '', $referer);

// Сериализация данных
$getData = !empty($get) ? base64_encode(serialize($get)) : '';

// Формирование структурированных данных
$data = [
'parent' => $id,
'path' => $url,
'referer' => $referer,
'get' => $getData,
'time' => date("d-M(H:i:s)")
];


$string = json_encode($data, JSON_UNESCAPED_SLASHES) . PHP_EOL;
self::writeFile($id, $string, 'get');
}

public static function writeFile($id, $string, $mod) {
// Защита от Path Traversal
$id = basename($id);
if (!preg_match('/^[a-z0-9_-]+$/i', $id)) {
throw new Exception("Invalid ID");
}

$last = date("Y-m");
$dir = self::root . self::path . '/' . $id;
$path = $dir . '/' . $last . '-' . $mod;

// Создание директории с безопасными правами
if (!is_dir($dir)) {
mkdir($dir, 0755, true);
}

file_put_contents($path, $string, FILE_APPEND | LOCK_EX);
}
PMПисьмо на e-mail пользователю
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sg.com  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 234
Пользователь №: 42899
На форуме: 9 лет, 17 дней
Карма: 4




Цитата (alexr23 @ 14.04.2025 - 11:17)
// Сериализация данных
    $getData = !empty($get) ? base64_encode(serialize($get)) : '';

наверное, если есть json_encode, сериализовать нет смыла.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса