[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как сделать удаление файлов
Страницы: 1, 2
tymmo
Привет!

Есть такой код который выводить все файлы из директории files/;

Так вот как удалять их, но через GET-запросы?

Приведите пример пожалуйста


<?php
$dir = "files/";
if(is_dir($dir)) {
$files = scandir($dir);
array_shift($files);
array_shift($files);
for($i=0; $i<sizeof($files); $i++) echo '<a href="'.$dir.$files[$i].'" title="открыть/скачать файл или страницу">'.$files[$i].'</a>;<br>';
}
else echo $dir.' -такой директории нет;<br>';
?>
Игорь_Vasinsky
я тебе уже писал - загугли как передавать параметры в GET php

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
AllesKlar
скрипт вызываешь вот так:
del.php?file=../../../etc/passwd


в скрипте пишешь
$file = $_GET['file'];

дальше, по аналогии с твоим кодом.

_____________
[продано копирайтерам]
killer8080
Цитата (tymmo @ 5.05.2015 - 19:55)
Так вот как удалять их, но через GET-запросы?

1 для операций изменяющих состояние данных на сервере всегда используй POST
2 контролируй директорию файлов, проверяй имя файла чтобы не допустить манипуляций с директориями (как выше показали)
3 проверяй права пользователя на удаление, контролируй принадлежность файла, чтоб юзеры не могли удалять файлы друг друга
4 помним о CSRF уязвимости
5 критические действия должны быть в два этапа, с запросом подтверждения на выполнение действия
Игорь_Vasinsky
Цитата
1 для операций изменяющих состояние данных на сервере всегда используй POST


чё так?

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
Цитата (Игорь_Vasinsky @ 6.05.2015 - 06:44)
Цитата
1 для операций изменяющих состояние данных на сервере всегда используй POST


чё так?

потому что у каждого метода своё назначение, гет нужен для выборке информации, так чтоб потом на неё можно было дать ссылку
пост для передачи управляющих параметров, а управляющие параметры не должны кешироваться, попадать в хистори браузера, передаваться кому то в виде ссылок и т.п.
плюс защита от CSRF, для пост её легко сделать глобальной для всего сайта, для гет нельзя, есть потенциальная вероятность угона токена через реферер.
плюс для CSRF через пост нужно жертву заманить на вредоносную страницу, с гет все намного проще, достаточно запостить картинки на форуме, который жертва регулярно посещает, и через src картинок выполнить нужные команды.
Игорь_Vasinsky
killer8080
на шизофрению смахивает.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
Цитата (Игорь_Vasinsky @ 6.05.2015 - 11:27)
на шизофрению смахивает.

CSRF шизофрения, XSS, SQLi паронойя, до здравствует говнокодинг, не оставим без работы спецов по безопасности! laugh.gif
Игорь_Vasinsky
http://site.ru/?file=myfile.txt

<?php
if(isset($_GET['file'])){
unlink('mydir/'.urldecode($_GET['file']));
}
?>


держи - порви мой код здоровым рассудком.

или этот

http://site.ru/?f=myfile

<?php
if(isset($_GET['f'])){
unlink('mydir/'.urldecode($_GET['f']).'.txt');
}
?>


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080

Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:31)
держи - порви мой код здоровым рассудком.

его уже порвал чуть выше пост от AllesKlar wink.gif
Как минимум дефесйнуть сайт можно одним махом biggrin.gif



Спустя 2 минуты, 11 секунд killer8080 написал(а):
Игорь_Vasinsky
тебя никак не смущает, что кто угодно может удалять файлы на твоем сервере, от твоего имени? Если нет, то о чем тогда спор biggrin.gif



Спустя 5 минут, 1 секунда killer8080 написал(а):
Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:31)
или этот

http://site.ru/?f=myfile

<?php
  if(isset($_GET['f'])){    unlink('mydir/'.urldecode($_GET['f']).'.txt');
  }?>

это ломается при наличии нулбайт уязвимости, если старой версии пых и отключен всеми ненавистный magic quotes, в любом случае кто угодно может удалять файлы .txt в любой директории доступной серверу на запись



Спустя 9 минут, 6 секунд killer8080 написал(а):
вот ещё ссылочка для общего развития smile.gif
Игорь_Vasinsky
killer8080
бля.


   if(isset($_GET['f'])){
$file = strtr($_GET['file'], array('..'=>''));
if(file_exists($file)){
unlink(__DIR__.'/mydir/'.urldecode($file).'.txt');
}
}



Цитата
тебя никак не смущает, что кто угодно может удалять файлы

пугает.

или это в админке или это в личном кабинете - но у каждого юзера своя директория - что пирдец - лучьше префикс у имени файла, например

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:45)
killer8080
бля.


  if(isset($_GET['f'])){
    $file = strtr($_GET['file'], array('..'));    if(file_exists($file)){
          unlink('mydir/'.urldecode($file).'.txt');    }
  }

все гораздо проще, достаточно basename(), а ты опять какую то сумбурную хрень накатал, причем здесь urldecode?
плюс
Цитата (killer8080 @ 5.05.2015 - 23:59)
3 проверяй права пользователя на удаление, контролируй принадлежность файла, чтоб юзеры не могли удалять файлы друг друга

Игорь_Vasinsky
Цитата
все гораздо проще, достаточно basename(),

как видишь - не обязательно

Цитата
а ты опять какую то сумбурную хрень накатал, причем здесь urldecode?

urldecode() причём? не догадываешься? laugh.gif

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:45)
пугает.

или это в админке или это в личном кабинете - но у каждого юзера своя директория - что пирдец - лучьше префикс у имени файла, например

ну ясно, то что твои файла без твоего ведома будут кем то удалятся это норма rolleyes.gif



Спустя 1 минута, 8 секунд killer8080 написал(а):
Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:52)
urldecode() причём? не догадываешься?

абсолютно, просвети меня biggrin.gif
Игорь_Vasinsky
Цитата
ну ясно, то что твои файла без твоего ведома будут кем то удалятся это норма


Цитата
лучьше префикс у имени файла, например


файлы лежат в одной директории

при загрузке к имени файла рисуется префикс по uid юзера

3223_my_file.txt

в урле my_file

юзер из кабинета удаляет файл - скрипт читает его uid из сессии и рисует префикс и расширение

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.