czwartek, 18 lutego 2010

Tomcat 6, proste uwierzytelnianie - część 2

W pierwsze części artykułu mówiliśmy o tym jak prosto zabezpieczyć naszą aplikację przed niewłaściwymi osobami. Ale jak już zauważyliśmy ma ona jedną bardzo ważną wadę. Hasła które zapisywane są w bazie danych nie są szyfrowane. Czyli każdy kto ma wgląd do naszej bazy danych, ma dostęp do haseł i loginów użytkowników, co jest niedopuszczalne.
Dlatego omówimy teraz jak w szybki sposób szyfrować hasła w bazie danych bardzo popularnym algorytmem md5.
Cały artykuł jest oparty o aplikacje którą stworzyliśmy w pierwszej części artykułu.

Baza danych
Baza danych jest dokładnie taka sama jak w pierwszej części artykułu, czyli:

CREATE TABLE users (
 login VARCHAR(20),
 password VARCHAR(100)
);

CREATE TABLE user_roles (
 login VARCHAR(20),
 rolename VARCHAR(20)
);
Jedyne co wymaga zmiany to zaszyfrowanie hasła. Robimy to poprzez wywołanie polecenia INSERT, z tą różnica że hasło będzie zaszyfrowane. Aby zaszyfrować hasło użyłem przykładowej strony, która wyskoczył jako jedna z pierwszych w wyszukiwarce google.com, pod hasłem: md5 generator.
Tak wiec po zaszyfrowaniu haseł admin i user uzyskujemy wyniki:
  • admin = 21232f297a57a5a743894a0e4a801fc3
  • user = ee11cbb19052e40b07aac0ca060c23ee

INSERT INTO users VALUES('admin','21232f297a57a5a743894a0e4a801fc3');
INSERT INTO user_roles VALUES('admin','admin');
INSERT INTO users VALUES('user1','ee11cbb19052e40b07aac0ca060c23ee');
INSERT INTO user_roles VALUES('user1','user');

Pliki konfiguracyjne
Musimy jeszcze zmienić nasz plikach konfiguracyjny WebContent/META-INF/context.xml, w którym ustawialiśmy parametry konfiguracyjne bazy danych. Do elementu <Realm> dodajemy atrybut digest="nazwa_algorytmu_szyfrującego", w naszym wypadku będzie to MD5.
Plik po modyfukacji powinien wyglądać tak:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Context antiResourceLocking="false" privileged="true">
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="0"
 driverName="org.gjt.mm.mysql.Driver" connectionURL="jdbc:mysql://localhost/testdb"
 connectionName="root" connectionPassword="mysql" userTable="users"
 userNameCol="login" userCredCol="password" userRoleTable="user_roles"
 roleNameCol="rolename" digest="MD5"/>
</Context>
Po tych zmianach wystarczy ponownie zdeployować aplikacje na serwerze. Strona działa dokładnie tak samo jak wersja bez użycia algorytmu szyfrującego md5, ale jest o wiele bardzije bezpieczna.

Brak komentarzy:

Prześlij komentarz