Security авторизация на Java + Javascript
Данный пост это продолжение темы про авторизацию только речь пойдет о Security или безопасной авторизации в админпанель сайта на Java. Ничем особым авторизация на Java от авторизации на PHP не отличается. На странице с формой для авторизации имеется Javascript который формирует хеш из суммы логина и пароля который и посылается на сервер для сравнения с хешем логина и пароля взятых из сеттингов движка.
При совпадении доступ в админку разрешается, в противном случае переход на страницу ошибки авторизации. Нюанс состоит в том, что на сервер в неизменном виде отправляется только хеш из суммы логина и пароля. Сами вбитые в соответствующие поля логин и пароль меняются на подставные строки-константы. В коде это выглядит примерно так:
<form method="post"
action="$turl/check.html">
<table width='100%'><tr><td align="center">
Логин:<br />
<
input name='login' type="text" value='' id="login" size='30' onfocus="this.style.background='#ccffcc'" onblur="this.style.background='#ffffff'" /><br />
Пароль:<br />
<
input name='pass' type="text" value='' id="password" size='30' onfocus="this.style.background='#ccffcc'" onblur="this.style.background='#ffffff'" /><br />
</td></tr>
<tr><td align="center">
<input type="submit" value="Войти" id="input" name="submit" />
</td></tr>
</table>
<input type="text" name="strcrypt" id="strcrypt" size="33" />
</form>
<script type="text/javascript">
///////////////////////////////////////
Здесь скрипт функции хеш sha1(ссылка на исходник в конце поста)
///////////////////////////////////////
// регистрация события onclick
document.getElementById('input').onclick = function() {
// получить данные с полей login и password
var login_string = document.getElementById('login').value;
var password_string = document.getElementById('password').value;
// поместить преобразованные данные в поле strcrypt
document.getElementById('strcrypt').value = SHA1(login_string + password_string);
// подстава вместо введенных логина и пароля
document.getElementById('login').value = "login";
document.getElementById('password').value = "password";
</script>
На сервере формируется хеш из суммы логина и пароля взятого из сеттингов движка и сравнивается с полученным хешем из формы для авторизации. Функция, вернее метод, для формирования хеш на Java выглядит так:
private static String encryptPassword(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException {
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(password.getBytes("UTF-8"));
return new BigInteger(1, crypt.digest()).toString(16);
}
а лучше так:
static String sha1(String input) throws NoSuchAlgorithmException {
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] result = mDigest.digest(input.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < result.length; i++) {
sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
Вот, собственно, и вся музыка. Что это дает? Ничего особенного, разве, что лишает злоумышленника перехватывать введенные в форму данные полей логина и пароля в неизменном виде после отправки их на сервер. Вместо них он получит заглушки-константы и хеш реально введенных логина и пароля. Наверняка, если повозиться то и с хешем можно справиться, но это уже длинная история не для ленивых.
Если по данной теме возникнут вопросы или замечания, то для этого имеется ссылка для добавления комментов. Исходный текст скрипта функции хеша SHA1.
Электроника :
- Техника электроника (11)
- Полезная электроника (4)
- Электроника для всех (5)
- Техника для дома (6)
- Cхемотехника ПЛИС (11)
- Пректирование PCAD (4)
Программирование :
- Микроконтроллеры (9)
- ПЛИС VHDL Verilog (29)
- C++ Builder (7)
- Visual Studio C++ C# (7)
- Java programming (7)
- Matlab programming (4)
Сайтостроение :
- Сайтостроение HTML (5)
- Сайтостроение PHP (8)
- PHP CMS на файлах (3)
- Web инструменты (9)
- Полезное вебмастеру (11)
- SEO раскрутка сайта (4)
- PHP скрипты (3)
Реклама :
Книги и учебники :
- Шаблоны сайтов (6)
- Книги и учебники (2)
Компьютер и интернет :
Поиск по сайту :
Реклама :
Облако меток :
Бесплатная подписка :
Статистика :
- Популярность (3)
- Посещаемость (3)
- Поисковые запросы (3)