- Автор темы
- #1
В данном разделе обсуждается все, что касается модификации, усовершенствование и оптимизации CMS WordPress-а.
Отключение автоматического создания картинок при загрузке через медиатеку
При загрузке картинке через встроенный меда загрузчик (медиафайлы) по-умолчанию wordpress создает аж 4 копии загружаемой картинки разного размера, что писец как не круто, особенно когда это не нужно.
Что можно сделать, а делаем следующие можно отключить данную опцию в админке.
Но бывает, что в шаблоне прописаны свои размеры и генерация картинок происходит все равно, тогда в футоре вставляем следующий код для того чтобы узнать какие размеры зарегистрированы в системе.
Код для вставки в footer:
(после того как получите названия зарегистрированных размеров вышеуказанный код удалить)
Код вернет ответ вот такого вида:
Отсюда нам нужны те размеры, что хотим удалить ну допустим (medium, medium_large, large).
ВНИМАНИЕ: Размер thumbnail (миниатюра) нужно оставить, этот размер нужен при создании стандартной галереи и в превью загруженных файлов в админ-панели.
Если уберете, то ст. галерея не будет работать нормально, медиатека будет грузить оригиналы файлови тормозить админку.
Далее вставляем код указанный ниже в functions.php
В итоге на выходе вы получите 2 файла пример: img.jpg и img-150x150.jpg вместо 4 копий и оригинала картинки то есть вместо 5 файлов 2, что есть круто!
Автоматически заполняем атрибут title на основе заголовка изображения при его вставки в контент поста.
Для этого необходимо вставить следующий код в functions.php
На выходе получите автоматическое добавление title при вставке картинки в статье или посте:
Заполняет поле для атрибута alt на основе заголовка изображения при его вставки в контент поста.
Для этого необходимо вставить следующий код в functions.php
На выходе получите автоматическое добавление title при вставке картинки в статье или посте:
Удаление авто-добавления тегов P и BR
У Wordpress есть такая дебильная штука добавлять теги br и p где то удобно но в большинстве случаев они мешают, вот классное решение.
Для этого необходимо вставить следующий код в functions.php
Авто обновление ядра/тем/плагинов/перевода
параметр __return_true - включает автоматическое обнавление
параметр __return_false - отключает автоматическое обнавление
Для этого необходимо вставить следующий код в functions.php
Удаление файлов license.txt, readme.html и т.д. по списку
При установке WP создаются txt и html файлы которые могу дать злоумышленнику информацию
о версии WP, плагине, что может помочь быстро выявить уязвимость и т.д. да и вообще меньше знает крепче спит)
Список можно дополнить, если есть необходимость, данный скрипт при заде в админку удалит файлы если они существуют на автомате.
Для этого необходимо вставить следующий код в functions.php
Удаляем логин админа в стилях «comment-author-» при коментариях от администратора
При коментариях от учетки админа, в html палится админская учетка в стилях «comment-author-» , что упростит работы для любителей брута так как админку они узнают и останется сбрутить пароль.
Для этого необходимо вставить следующий код в functions.php
Редирект с запроса ?author на главную
Скрытие логина админа через запрос ?author
В скрипте нужно указать небходимое количество учеток ?author=1, ?author=2 и т.д.
Для этого необходимо вставить следующий код в functions.php
Пилим .htaccess
вставляем полсе # END WordPress
RedirectMatch Permanent ^/author/
RedirectMatch Permanent ^/feed/ запрещаем фиды если не используем RSS
# Модифицируем .htaccess против MySQL-инъекций и других хаков
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
# Закрываем доступ к файлам
<files wp-config.php>
order allow,deny
deny from all
</files>
<Files wp-config-sample.php>
Order deny,allow
Deny from all
</Files>
<FilesMatch "xmlrpc.php">
Order Deny,Allow
Deny from all
</FilesMatch>
Двойная авторизация
Так как при бруте бот делает кучу обращений к файлу wp-login.php что грузит саму cms, может вызвать нагрузку на сервер после чего хостер заблочит сайт ну или в конце концов могут сбрутить пароль от сайта. Данный скрипт не дает обратится к файлу wp-login.php пока не авторизуются через данный скрипт, очь крутая штука!
вставляем полсе в .htaccess после # END WordPress
<Files wp-login.php>
AuthName "Access Denied"
AuthType Basic
AuthUserFile /home/c/test/website/public_html/.htpasswd //абсолютный путь к файлу .htpasswd
require valid-user
</Files>
# END WordPress
Создаем в корне сайта файл с именем .htpasswd в той же папке, где и файл .htaccess и потом в .htpasswd добавляем строку
пример:
admin:$aepr1$f3dVaHch40$ZvIWhiYS0MngH7NJ14wyK0 //пароль сгенерировать нужно свой
для генерации закодированного пароля Для просмотра ссылки Войдиили Зарегистрируйся
Если не знаете абсолютного пути то можно вот такой штукой воспользоваться
в корне сайта создаем файл test.php и добаляем туда код:
Функция для вставки PHP кода в тело статьи
В теле статьи вот в [exec] таких тегах [/exec] можно вставить любой PHP скрипт
Для этого необходимо вставить следующий код в functions.php
Если любите плагины то есть замечателный плагин Для просмотра ссылки Войдиили Зарегистрируйся он может многое из данного списка и есть еще свои хорошие фишки.
Отключение автоматического создания картинок при загрузке через медиатеку
При загрузке картинке через встроенный меда загрузчик (медиафайлы) по-умолчанию wordpress создает аж 4 копии загружаемой картинки разного размера, что писец как не круто, особенно когда это не нужно.
Что можно сделать, а делаем следующие можно отключить данную опцию в админке.
Но бывает, что в шаблоне прописаны свои размеры и генерация картинок происходит все равно, тогда в футоре вставляем следующий код для того чтобы узнать какие размеры зарегистрированы в системе.
Код для вставки в footer:
PHP:
<?
function get_image_sizes( $unset_disabled = true ) {
$wais = & $GLOBALS['_wp_additional_image_sizes'];
$sizes = array();
foreach ( get_intermediate_image_sizes() as $_size ) {
if ( in_array( $_size, array('thumbnail', 'medium', 'medium_large', 'large') ) ) {
$sizes[ $_size ] = array(
'width' => get_option( "{$_size}_size_w" ),
'height' => get_option( "{$_size}_size_h" ),
'crop' => (bool) get_option( "{$_size}_crop" ),
);
}
elseif ( isset( $wais[$_size] ) ) {
$sizes[ $_size ] = array(
'width' => $wais[ $_size ]['width'],
'height' => $wais[ $_size ]['height'],
'crop' => $wais[ $_size ]['crop'],
);
}
// size registered, but has 0 width and height
if( $unset_disabled && ($sizes[ $_size ]['width'] == 0) && ($sizes[ $_size ]['height'] == 0) )
unset( $sizes[ $_size ] );
}
return $sizes;
}
die( print_r( get_image_sizes() ) );
?>
Код вернет ответ вот такого вида:
PHP:
Array
(
[thumbnail] => Array
(
[width] => 150
[height] => 150
[crop] => 1
)
[medium] => Array
(
[width] => 250
[height] => 250
[crop] =>
)
[medium_large] => Array
(
[width] => 768
[height] => 0
[crop] =>
)
[large] => Array
(
[width] => 350
[height] => 350
[crop] =>
)
)
ВНИМАНИЕ: Размер thumbnail (миниатюра) нужно оставить, этот размер нужен при создании стандартной галереи и в превью загруженных файлов в админ-панели.
Если уберете, то ст. галерея не будет работать нормально, медиатека будет грузить оригиналы файлови тормозить админку.
Далее вставляем код указанный ниже в functions.php
PHP:
add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );
function delete_intermediate_image_sizes( $sizes ){
// размеры которые хотим удалить
return array_diff( $sizes, array(
'medium',
'medium_large',
'large'
) );
}
Автоматически заполняем атрибут title на основе заголовка изображения при его вставки в контент поста.
Для этого необходимо вставить следующий код в functions.php
PHP:
function lcb_restore_image_title( $html, $id ) {
$attachment = get_post($id);
if (strpos($html, "title=")) {
return $html;
}
else {
$mytitle = esc_attr($attachment->post_title);
return str_replace('<img', '<img title="' . $mytitle . '" ' , $html);
}
}
add_filter( 'media_send_to_editor', 'lcb_restore_image_title', 15, 2 );
function lcb_restore_title_to_gallery( $content, $id ) {
$thumb_title = get_the_title($id);
return str_replace('<a', '<a title="' . esc_attr($thumb_title) . '" ', $content);
}
add_filter('wp_get_attachment_link', 'lcb_restore_title_to_gallery', 10, 4);
Заполняет поле для атрибута alt на основе заголовка изображения при его вставки в контент поста.
Для этого необходимо вставить следующий код в functions.php
PHP:
function change_empty_alt_to_title( $response ) {
if ( ! $response['alt'] ) {
$response['alt'] = sanitize_text_field( $response['title'] );
}
return $response;
}
add_filter( 'wp_prepare_attachment_for_js', 'change_empty_alt_to_title' );
Удаление авто-добавления тегов P и BR
У Wordpress есть такая дебильная штука добавлять теги br и p где то удобно но в большинстве случаев они мешают, вот классное решение.
Для этого необходимо вставить следующий код в functions.php
PHP:
remove_filter( 'the_content', 'wpautop' );// для контента
remove_filter( 'the_excerpt', 'wpautop' );// для анонсов
remove_filter( 'comment_text', 'wpautop' );// для комментарий
параметр __return_true - включает автоматическое обнавление
параметр __return_false - отключает автоматическое обнавление
Для этого необходимо вставить следующий код в functions.php
PHP:
// Обновления ядра (движка)
add_filter('auto_update_core', '__return_true');
// Авто-обновление минорных версий (версии внутри ветки)
add_filter( 'allow_minor_auto_core_updates', '__return_true' );
// Авто-обновление мажорных версий (версии между ветками)
add_filter( 'allow_major_auto_core_updates', '__return_true' );
// Авто-обновление версий разработчиков
add_filter( 'allow_dev_auto_core_updates', '__return_true' );
// Включение авто-обновлений для всех плагинов
add_filter( 'auto_update_plugin', '__return_true' );
// Включение авто-обновлений для всех тем
add_filter( 'auto_update_theme', '__return_true' );
// Включение авто-обновлений всех файлов перевода
add_filter( 'auto_update_translation', '__return_true' );
При установке WP создаются txt и html файлы которые могу дать злоумышленнику информацию
о версии WP, плагине, что может помочь быстро выявить уязвимость и т.д. да и вообще меньше знает крепче спит)
Список можно дополнить, если есть необходимость, данный скрипт при заде в админку удалит файлы если они существуют на автомате.
Для этого необходимо вставить следующий код в functions.php
PHP:
if( is_admin() && ! defined('DOING_AJAX') ){
$license_file = ABSPATH .'/license.txt';
$readme_file = ABSPATH .'/readme.html';
$imglicense_file = ABSPATH .'/wp-includes/images/crystal/license.txt';
$pllicense_file = ABSPATH .'/wp-includes/js/plupload/license.txt';
$tinlicense_file = ABSPATH .'/wp-includes/js/tinymce/license.txt';
$swlicense_file = ABSPATH .'/wp-includes/js/swfupload/license.txt';
$idlicense_file = ABSPATH .'/wp-includes/ID3/license.txt';
$idreadme_file = ABSPATH .'/wp-includes/ID3/readme.txt';
$idcommercial_file = ABSPATH .'/wp-includes/ID3/license.commercial.txt';
if( file_exists($license_file) && current_user_can('manage_options') ){
$deleted = unlink($license_file) && unlink($readme_file) && unlink($imglicense_file) && unlink($pllicense_file) && unlink($tinlicense_file) && unlink($swlicense_file) && unlink($idlicense_file) && unlink($idreadme_file) && unlink($idcommercial_file);
if( ! $deleted )
$GLOBALS['readmedel'] = 'Не удалось удалить файлы: license.txt и readme.html из папки `'. ABSPATH .'`. Удалите их вручную!';
else
$GLOBALS['readmedel'] = 'Файлы: license.txt и readme.html удалены из из папки `'. ABSPATH .'`.';
add_action( 'admin_notices', function(){ echo '<div class="error is-dismissible"><p>'. $GLOBALS['readmedel'] .'</p></div>'; } );
}
}
При коментариях от учетки админа, в html палится админская учетка в стилях «comment-author-» , что упростит работы для любителей брута так как админку они узнают и останется сбрутить пароль.
Для этого необходимо вставить следующий код в functions.php
PHP:
function remove_comment_author_class( $classes ) {
foreach( $classes as $key => $class ) {
if(strstr($class, "comment-author-")) {
unset( $classes[$key] );
}
}
return $classes;
}
add_filter( 'comment_class' , 'remove_comment_author_class' );
Скрытие логина админа через запрос ?author
В скрипте нужно указать небходимое количество учеток ?author=1, ?author=2 и т.д.
Для этого необходимо вставить следующий код в functions.php
PHP:
function redirect_author_page() {
$page_viewed = basename($_SERVER['REQUEST_URI']);
if( $page_viewed == "?author=1" || $page_viewed == "?author=2" || $page_viewed == "?author=3" || $page_viewed == "?author=4" || $page_viewed == "?author=5") {
wp_redirect( '/' );
exit;
}
}
add_action('init','redirect_author_page');
вставляем полсе # END WordPress
RedirectMatch Permanent ^/author/
RedirectMatch Permanent ^/feed/ запрещаем фиды если не используем RSS
# Модифицируем .htaccess против MySQL-инъекций и других хаков
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1]
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
# Закрываем доступ к файлам
<files wp-config.php>
order allow,deny
deny from all
</files>
<Files wp-config-sample.php>
Order deny,allow
Deny from all
</Files>
<FilesMatch "xmlrpc.php">
Order Deny,Allow
Deny from all
</FilesMatch>
Двойная авторизация
Так как при бруте бот делает кучу обращений к файлу wp-login.php что грузит саму cms, может вызвать нагрузку на сервер после чего хостер заблочит сайт ну или в конце концов могут сбрутить пароль от сайта. Данный скрипт не дает обратится к файлу wp-login.php пока не авторизуются через данный скрипт, очь крутая штука!
вставляем полсе в .htaccess после # END WordPress
<Files wp-login.php>
AuthName "Access Denied"
AuthType Basic
AuthUserFile /home/c/test/website/public_html/.htpasswd //абсолютный путь к файлу .htpasswd
require valid-user
</Files>
# END WordPress
Создаем в корне сайта файл с именем .htpasswd в той же папке, где и файл .htaccess и потом в .htpasswd добавляем строку
пример:
admin:$aepr1$f3dVaHch40$ZvIWhiYS0MngH7NJ14wyK0 //пароль сгенерировать нужно свой
для генерации закодированного пароля Для просмотра ссылки Войди
Если не знаете абсолютного пути то можно вот такой штукой воспользоваться
в корне сайта создаем файл test.php и добаляем туда код:
PHP:
<?php
echo $_SERVER['DOCUMENT_ROOT'];
?>
В теле статьи вот в [exec] таких тегах [/exec] можно вставить любой PHP скрипт
Для этого необходимо вставить следующий код в functions.php
PHP:
function exec_php($matches){
eval('ob_start();'.$matches[1].'$inline_execute_output = ob_get_contents();ob_end_clean();');
return $inline_execute_output;
}
function inline_php($content){
$content = preg_replace_callback('/\[exec\]((.|\n)*?)\[\/exec\]/', 'exec_php', $content);
$content = preg_replace('/\[exec off\]((.|\n)*?)\[\/exec\]/', '$1', $content);
return $content;
}
add_filter('the_content', 'inline_php', 0);
Если любите плагины то есть замечателный плагин Для просмотра ссылки Войди
Последнее редактирование: