Archive for the ‘Mé projekty’ Category

Webová aplikace a osobní údaje - updated

Thursday, July 23rd, 2009

V rámci jedné ze svých prací řeším obecné zabezpečení webových ohledně osobních údajů. V současné době řeším, jak by měli být zabezpečeny osobní údaje, které webové aplikaci dáváte a zda to jde ověřit z uživatelského pohledu  (aspoň částečně)

  • heslo hashovat pořádnou hashovací funkcí, md5/sha1 jsou prolomené
  • Použití soli při hashování, vyhnutí se rainbow tabulkám
  • ochrana před SQL injection
  • ochrana přes XSS
  • nepoužívání register_globals coby bezpečnostní hrozby
  • nevyžadovat zbytečné údaje
  • Sledovat chyby a aktualizovat/opravovat, pokud jde o úpravu/užití připraveného systému (Joomla, Wordpress)

Co vy na to? Myslíte si, že něco chybí? Napište v komentářích, za každou připomínku děkuji…

UPDATE
  • pokud je to možné, používat SSL alespoň pro login
  • do cookies neukládat žádné osobní údaje

SICOWNy jde do světa

Monday, April 14th, 2008

Pokud jste četli můj předchozí příspěvek, ohledně pár jednoduchých skriptů na sdílení Internetového připojení, tušíte, že je to docela šikovná věc, která by se mohla uchytit. To jsem si řekl i já a tak vznikly SICOWNy. Název je zkratkou a to “Y” tam přidávám s jednoho prostého důvodu, pokud to přečtete aspoň trochu správně, lze to přečíst jako: “šikovný

Více informací najdete na GoogleCode pod názvem SICOWN

English version - SICOWN on the road

This page is about SICOWN. SICOWN is bunch of useful scripts and cofiguration for for easy enabling and disabling Internet connection sharing via WLAN. Because of difficulties with Windows Network settings, it uses DHCP server, FireHOL firewall for routing and ifconfig/iwconfig for setting up interfaces. You can find more at GoogleCode page SICOWN

Tak jsem zase tady aneb co se teď vlastně děje

Wednesday, March 26th, 2008

Po delší době jsem zase tady a vrhám se do aspoň o trošku častějšího blogování než jak tomu bylo za poslední dva měsíce, když jsem půlku tohoto času strávil mimo republiku a půlku v plné polní/práci.

Čemu se teď věnuji:

Aktuálně z hlediska programování, Linuxu a počítačů vůbec pracuji na několika “projektech”, především v Pythonu, ale tu a tam sklouznu i k takovým veselostem jako je úprava skriptu v Ruby nebo naprosto nepopsatelné programování v Bashi.

T61ctl

Sada skriptů pro Thinkpad T61, vycházející z modulů tp_smapi a thinkpad_acpi, s cílem co nejefektivněji ovládat svůj notebook. Aktuálně to umí jen hezky pracovat s baterkou, řekne vám kolik váš notebook ještě vydrží, další skript umí softwarově zapínat a vypínat Bluetooth.

Idea tohoto skriptu je taková, že vše lze ovládat jedním příkazem, buď pomocí Ncurses rozhraní, nebo pomocí parametrických příkazů (něco jako apt-get install/remove)

PyCrawler

Kvůli tomu, že mám za úkol vytvořit DVD z fotek a dalších souborů, to celé v nějakém autorun.bat + HTML kabátku. Za tímto účelem jsem se pustil do vývoje Crawleru v Pythonu, který by prováděl akce podle přípon souborů. Dokončení se blíží, protože už je na mě tlačeno, abych to celé dokončil. Výsledek snad bude multiplatformní a kdyby pak měl někdo časem chuť udělat nějaké jednoduché GUI třeba v Tkinteru, nebránil bych se mu :)

PyTTT

Můj dlouhodobý projekt na seminář Unix, který nemá s Unixem mnoho společného. Už o něm toho bylo napsáno dost, ale pořád ho dost není

Sazba střediskového almanachu

Ano, to mě taky čeká, jedna z nejdrsnějších prací v LaTeXu, která mě zatím čeká. Sazba cca 60ti stránkové knihy, s obrázky, dvousloupcová, spousta všelijakých obrázků, scanů a podobně. Zkrátka a dobře spousta srandy s TeXem

Jednoduchá úloha pro (ne)jednoduché lidi

Saturday, February 9th, 2008

Jsem se zase jednou pustil do kodérování (to je taková ta činnost, jak zběsile bušíte do oblíbeného textového editoru, 3x to opravíte a vypíše vám to něco jiného než chcete) a hned jsem narazil na docela zajímavý kodérský problém. Jak nejúsporněji vyřešit problém parametrů a jejich vzájemných závislostí a nesnášenlivostí.

Zadání:

Máme 3 podmínky

Parametr A: Může a nemusí být zvolen, může a nemusí být upraven parametry B nebo C

Parametr B: Může a nemusí být zvolen, musí pro svou funkčnost mít také parametr A ale je v konfliktu s parametrem C (může být jen jeden z nich)

Parametr C: Může a nemusí být zvolen, musí pro svou funkčnost mít také parametr A ale je v konfliktu s parametrem B

Úkoly:

a) Napište ověřující podmínky tak, aby byly co nejšetrnější k velikosti souboru (aby měli co nejméně bajtů)

b) Napište ověřující podmínky tak, aby byly co nejšetrnější k procesoru (aby se co nejméně používal procesor)

Svá řešení pište do komentářů, docela mě zajímá, jaké varianty se tu objeví

Těžko život administrátora aneb skriptujeme pro BFU

Tuesday, October 23rd, 2007

Moje matka po půl roce, co máme doma desktop, projevila reálný zájem o připojovat se přes něj na internet. Běžný linuxák prohlásí, ale to je snadné, připojí se na svůj Linuxový router, nastaví Iptables, povolí ICQ na firewallu, provrtá tři zdi, zapojí síťové kabely, třikrát se pomodlí k Linusovi a je to. Jednoduché, že? Ale u mě je tomu jinak…

Situace

Největší problém je v tom, že nebydlím v Praze, ale daleko na horách (čtěte na vesnici 30 km za Prahou), kde je dostupnost internetu shodná s dostupností multikin uprostřed Sahary nebo dobrého piva v Americe. Proto jsem nucen doma používat nevalně rychlý a nevalně stabilní CDMA modem. Jde o USB modem a připojení je vytáčené, což přináší spoustu radostí s připojováním.

Vytočíte, spadne, vytočíte, spadne, vypnete a zapnete modem, vytočíte, spadne, dáte modem do ledničky, vytočíte,
spadne, vytočíte se vy a jdete si číst

Cožpak já, já už vím jak na to a nějak se postarám, abych ten internet měl, ačkoliv občas s pingem 16 sekund. Ale co právě moji rodiče, otec počítače neznalý manager a matka, byť počítačově zdatná, něco jako shell naposledy viděla v době, kdy v práci používala Cobol a Algol. Od té doby pochopitelně trošku zpohodlněla, minimálně co se počítačů týče, dneska už jen provozuje makra ve Visual Basicu, která jsou trošku něco jiného než shell. Taky bych jí mohl něco naučit, ale to je moc práce a málo výzva ;)

Řešení

Takže nakonec padlo řešení na bashovský skript s grafickými dialogy pomocí zenity. Zenity je bashový zobrazovač GTK+ dialogů, mající spoustu voleb a hodina češtiny mi přišla ideální ke zkoumání jeho možností. Brzo jsem objevil, jak se vytváří všechna praktická okénka.

zenity error

Tím jsem vyřešil mou binární komunikaci s matkou ( Ti všímavější už pochopili komunikace probíhá na signálové úrovni, socketově bude probíhat pouze první ukázka)

Samotné připojení ovšem taková legrace není, neboť připojování probíhá pomocí pppd. Celý problém spočívá v detailu, že pppd je pěkný filuta, špatně se z něj získávají libovolné údaje o čemkoliv.

Vyzkoušel jsem leccos, ale všechno troskotalo na jedné základní věci, jak odchytit celý výstup, když se pppd při úspěšném spojení neumí “vymáčknout” a svůj výstup nedokončí. Zkoušel jsem různé pajpy do souborů a podobně, ale pořád to někde haprovalo, výstup se prostě nechtěl číst.

Až jednoho dne (respektive ještě ten den, asi 8 hodin poté) jsem při hledání parametrů v manuálových stránkách příkazu pon objevil jiný příkaz, plog. Plog se sice jmenuje stejně jako zvuk, který vydá záchodový zvon při běžném používání, ale je mnohem užitečnější. Umí totiž vypisovat několik posledních výstupů z démona pppd. Když jsem se pustil do zkoumání, objevil jsem že celé slavné plog je sedmiřádkový skript

1
2
3
4
5
6
7
#!/bin/sh
if [ -s /var/log/ppp.log ]; then
    exec tail "$@" /var/log/ppp.log
 
else
    exec tail "$@" /var/log/syslog | grep ' \(pppd\|chat\)\['
fi

V čem je ten skript tak převratný? Poradil mi, že můžu data vytahovat ze syslogu, kam mi pppd loguje. Výsledkem všeho je v podstatě genitální skript, který můžu matka (případně babička, dědeček, pes, papoušek nebo želva) v klidu spustit a vědět, zda internet opravdu funguje. Jak to celé vypadá?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
#Provedeme připojení přes CDMu
pon cdma & &> /dev/null
 
#Počkáme si, až se CDMA určitě připojí
sleep 8
 
#Vezmeme poslední řádek ze syslogu
vystup=`tail -n /var/log/syslog | grep ' \(pppd\|chat\)\[' | tail -n1 `
 
#!!!!!! POZOR !!!!!!!!!!
# !!! Od tohoto místa prosím slabší povahy, aby dále nečetli, neboť půjde o velmi brutální prasečiny !!!
#!!!!!! POZOR !!!!!!!!!!
 
#zkusíme grepnout  jeden z obvyklých errorů
echo $vystup | grep "unrecognized option" - > /dev/null
 
#proměnná $? obsahuje exit kód posledního příkazu (u nás grep)
#Pokud je exit kód  0 (tedy jsem úspěšně grepli) pak
if [ $? -eq 0 ];then
    zenity --error --text="Modem není zapojen, nebo se to tak alespoň zdá";
    exit 1
fi;
 
#a dále grepáme
echo $vystup | grep "locked" - > /dev/null
 
if [ $? -eq 0 ];then
    zenity --error --text="Internet se tváří, že je již připojen";
    exit 1
fi;
 
echo $vystup | grep --ignore-case "Failed" - > /dev/null
 
if [ $? -eq 0 ];then
    zenity --error --text="Nepodařilo se připojit";
    exit 1
fi;
 
#Pokud se nic zvláštního nestalo
zenity --info  --text="Spojení se pravděpodobně zdařilo";

Ještě jsem neměl čas předhodit to betatesterům (tj. matce), ale i na to brzy dojde a já budu moct celý skript prohlásit za funkční (a časem snad i bugu-vzdorný a blbu-vzdorný)