Здравствуйте, скажите пожалуйста есть php скрипт Код (PHP): <?php // Данные $ftphost = '127.0.0.1'; // Адрес FTP сервера $ftpport = '21'; // Порт FTP серверар $ftpuser = 'user'; // Пользователь FTP $ftppasswd = 'password'; // Его пароль // Папка, которую нужно выводить $folder = '/addons/sourcemod/logs'; // Первые буквы файлов, которые можно выводить $prepend = array( 'errors_', 'L', ); // Запрещенные файлы (файлы, в которых имеются такие буквы) $denyed = array( 'vip', 'txt' ); // Отключим ошибки =) error_reporting(0); /** * Системный класс приложения * @package Скрипт вывода файлов с FTP * @author Урих Александр <urichalex@mail.ru> * @link http://craft-soft.ru Команда разработчиков CraftSoft */ class System { private $ftphost; private $ftpport; private $ftpuser; private $ftppasswd; private $logfolder; private $res; /** * Параметры для подключения к FTP * @param string $ftphost Адрес FTP * @param string $ftpuser Логин пользователя FTP * @param string $ftppasswd Пароль * @param string $ftpport Порт * @param string $logfolder Папка, из которой брать файлы */ public function __construct($ftphost, $ftpuser, $ftppasswd, $ftpport, $logfolder) { $this->ftphost = $ftphost; $this->ftpuser = $ftpuser; $this->ftppasswd = $ftppasswd; $this->ftpport = $ftpport; $this->logfolder = $logfolder; $this->res = ftp_connect($this->ftphost, $this->ftpport); $login = ftp_login($this->res, $this->ftpuser, $this->ftppasswd); if(!$this->res || !$login) { $this->res = FALSE; } ftp_chdir($this->res, $this->logfolder); } public function __destruct() { ftp_close($this->res); } /** * Получение списка файлов * @param string $allowed Разрешенные префиксы * @return array Список файлов массивом */ public function getFiles($prepend, $denyed) { // Получим список файлов с FTP $files = $this->listFiles(); // Если файлы есть, возвращаем их if($files !== FALSE) { $return = array(); foreach($files as $file) { $file = basename($file); if($this->check($file, $prepend, TRUE) || $this->check($file, $denyed)) continue; $return[] = $file; } } return $return; } /** * Получение файла на скачивание * @param string $file Им файла */ public function getFile($file) { $content = file_get_contents( 'ftp://'.$this->ftpuser.':'.$this->ftppasswd.'@'.$this->ftphost.'/'.$this->logfolder.'/'.$file ); if(!$content) return FALSE; $this->sendFile($file, $content, 'application/download'); } private function check($string, $pattern, $prepend = FALSE) { if(empty($pattern)) return FALSE; if($prepend) { foreach($pattern as $p) { $pr = substr($string, 0, strlen($p)); if($pr === $p) return FALSE; } return TRUE; } else { foreach($pattern as $p) { if(strpos($string, $p) !== FALSE) return TRUE; } } return FALSE; } /** * Получение списка файлов с FTP * @return array Массив с фафлами */ private function listFiles() { return ftp_nlist($this->res, '.'); } /** * Отдает файл по содержимому * @param type $fileName Имя файла * @param type $content Содержимое файла * @param type $mimeType MINE тип файла */ private function sendFile($fileName,$content,$mimeType='text/plain') { $fileSize=(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)); $contentStart=0; $contentEnd=$fileSize-1; $length=$contentEnd-$contentStart+1; header('HTTP/1.1 200 OK'); header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header("Content-Type: $mimeType"); header('Content-Length: '.$length); header("Content-Disposition: attachment; filename=\"$fileName\""); header('Content-Transfer-Encoding: binary'); $content=function_exists('mb_substr') ? mb_substr($content,$contentStart,$length) : substr($content,$contentStart,$length); echo $content; exit(); } } $data = new System($ftphost, $ftpuser, $ftppasswd, $ftpport, $folder); if(isset($_GET['file'])) $data->getFile($_GET['file']); ?> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8" /> <title>Скачать файлы</title> <style type="text/css"> table { width: 100% } td { padding: 7px; border: 1px solid #c1c1c1 } .container { width: 500px; margin: 20px auto 0 auto; } </style> </head> <body> <div class="container"> <h3>Скачать файлы</h3> <table> <?php foreach($data->getFiles($prepend, $denyed) as $file):?> <tr> <td> [url="?file=<?php echo $file?>"]<?php echo $file?>[/url] </td> </tr> <?php endforeach;?> </table> </div> </body> </html> Когда запускаешь его (закинув его на сайт www) работает html код. Скажите пожалуйста, пользователи могут как-то посмотреть сам php код а не то что он выводит в html ? если да - то как? PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
это как? т.е если в моем mysite.ru/skript.php - будет мой пароль от FTP то он любой сможет его посмотреть?
да. Скачать сайт можно легко через PHP а можно программу скачать к примеру "Offline Explorer. " Добавлено спустя 2 минуты 6 секунд: храни эти файлы в директории которая находится выше от корня сайта.
помогите пожалуйста грамотно разделить html и php часть кода так чтоб не могли украсть мою php часть там где будут важные для меня пароли... Спасибо. Добавлено спустя 2 минуты 6 секунд: сам код в 1 посту. Добавлено спустя 1 минуту 43 секунды: Проще говоря как можно защитить утечку данных в скрипте от глаз пользователя (злоумышленника) так чтоб скрипт в то же время нормально работал.?
mahmuzar, что за глупость вы говорите? Naykon, украсть php-код вашего сайта можно только взломав ваш FTP или взломав ваш сайт через уязвимость. Простой пользователь (не проф. хакер) этого сделать никак не сможет, они увидят только результат работы
Вы можете на примере моего скрипта из 1 поста сделать так? я еще новичек к сожалению .. сам не осилю. я там конимаю папку var\www пользователь уже не видит... видит только папку var\www\html ? Помогите кодом!
Naykon, не слушайте глупости. Любое обращение к php-файлу по протоколу http заставит сервер его запустить. Офлайн-браузеры тоже будут по протоколу http пытаться скачать сайт
Тогда давайте поступим так. Кто считает что легко можно узнать содержимое php файла то прошу привести пример на моем сайте http://194.79.60.34/ftpdownload.php - узнайте с этого файла мой логин и пароль который я там указал в коде PHP. Если сможете это сделать то дайте защиту от этого... Спасибо. =)
mkramer, а если он скачает сайт? Добавлено спустя 23 секунды: конечно же через браузер он не сможет увидеть код PHP
Naykon, да, похоже можешь как есть все оставить, пользователь ничего не увидит. Что-то я тупанул и не то выложил. Добавлено спустя 1 минуту 28 секунд: попытка скачать сайт тоже самое что попытка пользователя просмотреть страницу( как говорилось выше) поэтому скрипт выполнится и будет только код разметки. Короче, никакого кода PHP. Добавлено спустя 1 минуту 8 секунд: Naykon, извини что ввел в заблуждение, но главное тут не дадут этого сделать
Не работает. Говорит что такого файла нет. Как минимум есть опасность: не проверяется принадлежность запрашиваемого пути этой папке. Или я не вижу где проверяется.