Привет!
Есть такой код который выводить все файлы из директории 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
5.05.2015 - 21:44
я тебе уже писал - загугли как передавать параметры в 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
5.05.2015 - 22:11
скрипт вызываешь вот так:
del.php?file=../../../etc/passwd
в скрипте пишешь
$file = $_GET['file'];
дальше, по аналогии с твоим кодом.
_____________
[продано копирайтерам]
killer8080
6.05.2015 - 00:59
Цитата (tymmo @ 5.05.2015 - 19:55) |
Так вот как удалять их, но через GET-запросы? |
1 для операций изменяющих состояние данных на сервере всегда используй POST
2 контролируй директорию файлов, проверяй имя файла чтобы не допустить манипуляций с директориями (как выше показали)
3 проверяй права пользователя на удаление, контролируй принадлежность файла, чтоб юзеры не могли удалять файлы друг друга
4 помним о CSRF уязвимости
5 критические действия должны быть в два этапа, с запросом подтверждения на выполнение действия
Игорь_Vasinsky
6.05.2015 - 07:44
Цитата |
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
6.05.2015 - 12:24
Цитата (Игорь_Vasinsky @ 6.05.2015 - 06:44) |
Цитата | 1 для операций изменяющих состояние данных на сервере всегда используй POST |
чё так?
|
потому что у каждого метода своё назначение, гет нужен для выборке информации, так чтоб потом на неё можно было дать ссылку
пост для передачи управляющих параметров, а управляющие параметры не должны кешироваться, попадать в хистори браузера, передаваться кому то в виде ссылок и т.п.
плюс защита от CSRF, для пост её легко сделать глобальной для всего сайта, для гет нельзя, есть потенциальная вероятность угона токена через реферер.
плюс для CSRF через пост нужно жертву заманить на вредоносную страницу, с гет все намного проще, достаточно запостить картинки на форуме, который жертва регулярно посещает, и через src картинок выполнить нужные команды.
Игорь_Vasinsky
6.05.2015 - 12:27
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
6.05.2015 - 13:23
Цитата (Игорь_Vasinsky @ 6.05.2015 - 11:27) |
на шизофрению смахивает. |
CSRF шизофрения, XSS, SQLi паронойя, до здравствует говнокодинг, не оставим без работы спецов по безопасности!
Игорь_Vasinsky
6.05.2015 - 13:31
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
6.05.2015 - 13:35
Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:31) |
держи - порви мой код здоровым рассудком. |
его уже порвал чуть выше пост от
AllesKlar Как минимум дефесйнуть сайт можно одним махом
Спустя
2 минуты, 11 секунд killer8080 написал(а):
Игорь_Vasinskyтебя никак не смущает, что кто угодно может удалять файлы на твоем сервере, от твоего имени? Если нет, то о чем тогда спор
Спустя
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 написал(а):
вот ещё
ссылочка для общего развития
Игорь_Vasinsky
6.05.2015 - 13:45
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
6.05.2015 - 13:50
Цитата (Игорь_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
6.05.2015 - 13:52
Цитата |
все гораздо проще, достаточно basename(), |
как видишь - не обязательно
Цитата |
а ты опять какую то сумбурную хрень накатал, причем здесь urldecode? |
urldecode() причём? не догадываешься?
_____________
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
6.05.2015 - 13:52
Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:45) |
пугает.
или это в админке или это в личном кабинете - но у каждого юзера своя директория - что пирдец - лучьше префикс у имени файла, например |
ну ясно, то что твои файла без твоего ведома будут кем то удалятся это норма
Спустя
1 минута, 8 секунд killer8080 написал(а):
Цитата (Игорь_Vasinsky @ 6.05.2015 - 12:52) |
urldecode() причём? не догадываешься? |
абсолютно, просвети меня
Игорь_Vasinsky
6.05.2015 - 13:56
Цитата |
ну ясно, то что твои файла без твоего ведома будут кем то удалятся это норма |
Цитата |
лучьше префикс у имени файла, например |
файлы лежат в одной директории
при загрузке к имени файла рисуется префикс по 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
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.