У меня есть тема WordPress со страницей настроек. Я включил базовую функцию экспорта / импорта. Функция экспорта позволяет пользователям загружать параметры в текстовый файл .dat и сохранять их на своем компьютере. Кнопка параметров импорта читает файл .dat и перезаписывает текущие параметры в базе данных. Затем файл удаляется в конце выполнения скрипта (не сохраняется на сервере).
Нет отдельных файлов uploads.php, все происходит в одном скрипте (экспорт, импорт и т. Д.).
Я попытался импортировать некоторые php-файлы и файлы других типов, и единственное, что произошло, было уничтожено. Но это то, что должно произойти, импортированный файл должен заменить все, что находится в базе данных.
Пользователь может получить доступ к этой форме, только если он вошел в панель управления WordPress с правами администратора.
Так что в этой форме импорта нет необходимости иметь расширенные функции безопасности, не так ли? Кроме, может быть, я должен попробовать это с файлами .sql и посмотреть, что может произойти? Может ли кто-нибудь создать файл .sql и уничтожить всю базу данных? Должен ли я занести в черный список .sql файлы, чтобы быть в безопасности?
Вот мой код импорта:
if ( $_GET['page'] == basename(__FILE__) ) {
if ( 'export' == $_POST['action']) {
cpress_export();
}
if (isset($_FILES['settings'])){
if ($_FILES["settings"]["error"] > 0){
echo "Error: " . $_FILES["settings"]["error"] . "<br />";
} else{
$rawdata = file_get_contents($_FILES["settings"]["tmp_name"]);
$cp_options = unserialize($rawdata);
update_option('cpress_options', $cp_options);
header("Location: themes.php?page=options_page.php&import=true");
}
}
А вот мой код экспорта (в том же файле):
function cpress_export(){
$settings = get_option('cpress_options');
$file_out = serialize($settings);
header("Cache-Control: public, must-revalidate");
header("Pragma: hack");
header("Content-type: text/plain; charset=ISO-8859-1");
header('Content-Disposition: attachment; filename="cpress-options-'.date("Ymd").'.dat"');
echo $file_out;
exit;}