09/05/2014

Niepozorna pomyłka

Home

Regularnie przeglądam różne portale na temat szeroko pojętego bezpieczeństwa w IT i co raz to dziwię się jak pozornie małe błędy programistów doprowadzają do poważnych problemów i awarii. Czytając ostatnio taki artykuł przypomniałem sobie rozmowę na temat implementacji stronicowania (ang. paging), czyli podziału dużej liczby rekordów na mniejsze porcje i przesyłanie tych porcji do klienta m.in. w celu ograniczenia ruchu w sieci.

W tym przypadku domyślna wielkość strony była skonfigurowana po stronie serwera, ale wysyłając żądanie klient mógł ją nadpisać i podać własną wielkość strony. Rozwiązanie w miarę standardowe, coś podobnego można zrobić odpytując Active Directory, o czym pisałem w tym artykule. Problem w tym przypadku polegał na tym, że wartość podana przez klienta nie była w żaden sposób sprawdzana po stronie serwera. Teoretycznie można więc było zażądać zwrócenie z serwera dowolnie dużej porcji danych. Innymi słowy, wysyłając żądanie wielkości kilku kilobajtów można było otrzymać odpowiedzieć wielkości na przykład 10 MB, a to przecież gigantyczne zwielokrotnienie. A gdyby takich żądań wysłać kilkadziesiąt, kilkaset, a może kilkanaście tysięcy, a do tego podmienić w żądaniu adres odbiorcy?

O czymś podobnym można było niedawno przeczytać w kontekście protokołu NTP. Wspomniany przeze mnie przypadek to w porównaniu z tym pikuś, gdyż użyty protokół komunikacyjny był specyficzny dla danej aplikacji, liczba użytkowników była niewielka itd. więc i zakres potencjalnego ataku był bardzo ograniczony. Z drugiej strony, skoro programista napisał taki kod raz, to może go napisać drugi, trzeci i w którymś momencie nie będzie to mała aplikacja. Na takie rzeczy należy, więc zawsze zwracać uwagę, nawet jeśli w danym przypadku wydaje się to nadmiarowe. Możliwe, że twórca kodu wybrał takie rozwiązanie celowo, ale równie dobrze może to być po prostu przeoczenie lub pomyłka.

29/04/2014

This feature has been disabled by your administrator

Home

Jakiś czas temu zacząłem używać pakiety Office 2013. Wszystko było w porządku dopóki nie zorientowałem się, że OneNote przestał synchronizować się z dyskiem SkyDrive. Dokładniej przy próbie zalogowania się do usługi krzyczał komunikatem:

This feature has been disabled by your administrator

Szybko znalazłem ten artykuł, z którego wynikało, że winne mogą być złe wpisy w rejestrze tj.:

HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\SignIn\SignInOptions
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Common\Internet\UseOnlineContent

W moim przypadku ich brakowało, a więc je dodałem ustawiając na domyślne wartości (odpowiednio 0 oraz 3). Potem zrestartowałem OneNote'a. Po ponownym uruchomieniu aplikacja dłużej zastanawiała się co zrobić, ale w końcu znowu wyświetliła ten samym komunikat.

Postanowiłem, więc użyć programu Process Monitor i zobaczyć jakich kluczy używa jeszcze OneNote. Jest ich bardzo dużo, ale dopisało mi szczęście ponieważ zauważyłem,  że na samym początku odczytywany jest następujący klucz:

HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\15.0\Common\SignIn\SignInOptions

Nie był on wymieniony we wspomnianym artykule, ale jak łatwo zauważyć ścieżka do tego klucza jest prawie taka sama jak do jednego ze wspomnianych kluczy. Postanowiłem, więc skonfigurować go w taki sam sposób czyli ustawić na wartość 0. Okazało się to strzałem w dziesiątkę i teraz OneNote działa mi poprawnie :)

26/04/2014

Jeśli nie na tabela tymczasowa to co?

Home

W poście Quiz - coś do poduszki opublikowałem zestaw pytań z Quiz'u jaki zorganizowałem dla kolegów z pracy. Od czasu do czasu wpadają mi do głowy różne zagadki dlatego postanowiłem, że co ciekawsze będę wrzucał ku pamięci na bloga. Oto pierwsza z nich.

Po wykonaniu poniższego kodu na ekran zostanie wypisana wartość 0. Czego należy użyć zamiast tabeli tymczasowej aby aby na ekran została wypisana wartość 2?
CREATE TABLE #Temp (
Id INT IDENTITY,
Value VARCHAR(10)
);

BEGIN TRANSACTION;
INSERT INTO #Temp VALUES('aaa');
INSERT INTO #Temp VALUES('bbb');
ROLLBACK;

SELECT COUNT(1) FROM #Temp;

DROP TABLE #Temp;
Pokaż/Ukryj odpowiedź

Zamiast tabeli tymczasowej należy użyć zmiennej tabelarycznej.
DECLARE @Temp TABLE (
Id INT IDENTITY,
Value VARCHAR(10)
);

BEGIN TRANSACTION;
INSERT INTO @Temp VALUES('aaa');
INSERT INTO @Temp VALUES('bbb');
ROLLBACK;

SELECT COUNT(1) FROM @Temp;

22/04/2014

A może coś do posłuchania...

Home

Czytam dużo, a nawet bardzo dużo i jeszcze 2-3 lata temu nie myślałem, że przestawię się z książek papierowych na e-book'i. W tej chwili korzystam już tylko z tych drugich. Co prawda nie pachną tak fajnie jak te papierowe, ale dzięki czytnikowi mogą mieć zawsze przy sobie całą bibliotekę, a przede wszystkim nie zajmują mi miejsca na półce, którego już mi brakuje ;) Ponieważ tak lubię czytać, a czytanie bezgłośne zajmuje mniej czasu to do niedawna sporadycznie korzystałem z audiobook'ów. Dodatkowo wiele audiobook'ów wymaga płyty CD i jak tego słuchać w drodze do pracy.

Napisałem do niedawna, bo ostatnio odkryłem serwis audioteka.pl, w którym można kupić audiobook'a i od razu pobrać go na telefon (na komputer zresztą też). Rzadko "reklamuję" komercyjne serwisy, ale jeśli ktoś dostarcza treść na bardzo wysokim poziomie to czemu nie chwalić. A słuchowisko "Niezwyciężony" na podstawie prozy Lema, od którego zacząłem swój kontakt z tym serwisem, jest po prostu świetne. Muzyka, efekty dźwiękowe, lektorzy, wszystko stoi dla mnie na światowym poziomie.

Początkowo myślałem, że wysłuchanie całości zajmie mi sporo czasu, że będę słuchał po kawałku w drodze do pracy lub w czasie biegania. Zamiast tego historia tak mnie wciągnęła, że całości wysłuchałem w ciągu niecałych 3 dni. Szczerze polecam! W tej chwili przerabiam "Cała prawda o Planecie KSI. Drugie spojrzenie na Planetę KSI" Zajdla oraz Dolores Claiborne King'a. To już typowe audiobook'i, ale też mi się podobają, w sam raz do jazdy samochodem albo na podróż do/z pracy.

18/04/2014

Notpron

Home

Skoro czytacie tego posta to do pewnego stopnia jesteście geekami, a skoro tak to chciałbym Wam polecić stronę, a właściwie grę notpron. Dowiedziałem się o niej niedawno i od razu mi się spodobała. To podobno jednak z najtrudniejszych gier tego typu na świecie. Zasady są natomiast bardzo proste. Zaczynasz od strony startowej i masz przejść do następnej, a aby to zrobić musisz podać login i hasło, które są odpowiedzią na zagadkę, zajrzeć do kodu strony, zmienić odpowiednio URL, przeczytać napis zakodowany Morsem itd. Gra składa się ze 140 poziomów, a ukończyło ją tylko około 30 osób z bardzo wielu, którzy próbowali. Jeśli więc lubcie wytężać szare komórki to zapraszam do zabawy.