Dažreiz gadās, ka kāda projekta ietvaros ir nepieciešami dati, kuri atrodas uz cita servera web pieejamā formātā. Šie dati ir brīvi pieejami izmantojot web pārlūku, tomēr pie noteiktiem apjomiem to manuāla apstrāde nav praktiski lietderīga.
Lielākoties šādiem gadījumiem izmatoju Unix komandu wget ar kuru var saglabāt web lapas saturu, kuru pēc tam ar cat, grep, awk, cut un citām Unix komandām var sastrukturizēt sev vēlamā formātā.
Ziemassvētku brīvdienās, statistikas nolūkos, radās nepieciešamība apstrādāt vienā resursā saglabāto informācija.
Diemžēl pakāpeniski šajā konkrētā situācijā radās divas problēmas- satura iegūšanai bija nepieciešams autorizēties un lietotāja sesija tika kontrolēta izmantojot pārlūka sesiju (nestrādā ar wget).
Ar pirmo problēmu veiksmīgi varēja tikt galā autorizējoties ar pārlūku un pēc tam izmantojot export_firefox_cookies.py skriptu (https://github.com/jabbalaci/Bash-Utils/blob/master/firefox/export_firefox_cookies.py), lai pārlūka cookies varētu izeksportēt wget saprotamā formātā.
Skripta sintakse ir vienkārša:
./skripta_nosaukums majaslapas_adrese
Rezultātā iegūstam visus nepieciešamos cookies failā cookies.txt (pirms tam jāparediģē skripts, norādot korektu adresi, kur atrodas cookie DB).
Nākamais jau sagādāja problēmas, jo neizdevās ar wget nosimulēt noturīgu sesiju.
wget –cookies=on –load-cookies=cookies.txt –keep-session-cookies –post-data ‘email=rear_email&password=real_password’ –save-cookies cookies.txt http://autorization _web_page_from_form
Diemžēl šādi var tikai sekmīgi autorizēties un iegūt pirmo noklusēto lappusi pēc autorizācijas. Piekļūt jau pie nākamajiem resursiem neizdodas un notiek redirect uz autorizācijas lapu.
Šo problēmu var atrisināt uzstādot SaveAll! Pluginu Iceweasel pārlūkam-
pirmo reizi autorizējamies ar pārlūku, atveram visus resursus un saglabajam:
./Iceweasel resursa_adrese (iepriekš saglabāta no faila. Kā to izdarīt var pameklēt http://www.cyberciti.biz/faq/bash-for-loop/)
Kad ir atvērti visi resursi ar uztādīto pluginu File->Save All Tabs as .. saglabājam lapas. X+ Save pogas nospiešana un lieta darīta. Varam sev pasist pa plecu.
Pārējais ir tikai failu satura analīze, šķirošana un ievietošana DB.
Šajā sakarā ļoti palīdz web programmētāji, kas vajadzīgo informāciju marķē, jo to vienkārši var atlasīt:
http://stackoverflow.com/questions/10781717/how-to-find-information-inside-a-xml-tag-using-grep
grep -oP ‘(?<=).*?(?=)’
Ko no tā ir vērts piefiksēt vēsturei:
- wget labi strādā lapās bez autorizācijas
- wget labi strādā lapās, kurās autorizācija tiek kontrolēta tikai ar cookies
- Ar parasti glābēj rīku OWASP ZAP skriptējot pieprasījumus izdevās iegūt vajadzīgās atbildes, diemžēl funkcija Report-> Export Responses ļauj saglabāt tikai vienu atbildi. Pameklējot noteikti no ZAP DB varētu izvilkt visus ierakstus, bet tas šoreiz netika izmantots. Nospiest ok daudzas reizes bija vieglāk.
- Vēl iešāvās doma par web offline reader funkcionalitāti, kas saglabā visus resursus vienā vietā pēc autorizācijas, bet to funkcionalitāte netika pārbaudīta (vajadzētu paeksperimentēt).
Kā aizsargāties no kopēšanas:
- Vai mēs to gribām?- tas prasa iestrādātus risinājumus un datora kapacitāti
Ja tomēr gribam:
- Limitēt pieprasījumus no vienas IP (viegli apejams, uzstādot, lai IP mainās noteiktā periodā
- Limitēt pieprasījumus no vienas IP konkrētai adresei (diezgan procesora jaudas aizņemošs)
- Izmantot limitāciju ar CAPCHA funkcionalitāti, piemēram, pēc x izsaukumiem x stundās no vienas IP lietotājam jāievada CAPCHA. X parametrs brīvi variējams atkarībā no projekta svarīguma. Šis ir pats labākais risinājums, diemžēl ne pārāk daudz to izmanto.
Lai jums izaicinājumu bagāts nākamais gads.