HTML parsētājs – SimpleHTMLDom
Bieži vien ir nepieciešams caur PHP ievākt saturu no kādas citas web-lapas un tikai retos gadījumos dati ir pieejami ērtajā XML/RSS formātā. Tādēļ nākas parsēt citas web-lapas HTML kodu un klasiskākā pieeja ir regular expressions izmantošana, kas ir salīdzinoši laikietilpīgs process gan pirmajā piegājienā, gan pēc katrām izmaiņām parsējamās web-lapas HTML koda struktūrā. Nesen atteicos no šāda mazohisma un sāku izmantot jau gatavu klasi HTML parsēšanai – SimpleHTMLDom.
SimpleHTMLDom ļauj atlasīt vajadzīgo saturu ar tikai dažām koda rindiņām un izmanto tādus pašus selektorus kā jQuery vai Prototype Javascript framework.
Unobtrusive Javascript
Noformējumam ir jābūt atdalītam no satura! Lūk tieši tādēļ mums ir iespēja web-lapas HTML failā glabāt tikai strukturizētu saturu, bet CSS un JavaScript pārvietot uz atsevišķiem failiem. Ieguvums ir ne tikai “tīrāks” lapas kods, kas atvieglo izstrādi un modificēšanu nākotnē, un ātrdarbību, bet tas ir arī pluss no SEO viedokļa, jo tādi meklētāji kā Google varēs vieglāk indeksēt saturu. Ar CSS viss ir vienkārši un skaidri – glabājam to atsevišķā failā un izvairāmies no “inline” stilu definēšanas (<div style=”…”).
Arī JavaScript var pilnībā atdalīt no lapas satura un ne tikai glabāt to atsevišķos failos, bet arī nelietot tādus event`us kā onClick, onMouseOver, onLoad u.t.t. JavaScript web-lapā ir papildus funkcionalitāte un nedrīkst paļauties uz tā atbalstu lietotāja pārlūkprogrammā, jo tas var būt gan vienkārši atslēgts, gan izfiltrēts, gan netikt atbalstīts mobilajās ierīcēs.
Drošības pamati web-lapās
Piedāvāju nelielu aprakstu par populārākajām web-lapu ievainojamībām un padomus kā izvairīties no tām.
SQL injekcijas
Ja dati pirms to saglabāšanas datu bāzē netiek pareizi apstrādāti, tad ļaundaris var injicēt papildus nosacījumus SQL pieprasījumos, kā rezultātā ir iespējams nolasīt/labot/dzēst jebkurus datus datu bāzē. Vairāk par SQL uzbrukumiem – SQL Injection Cheat Sheet.
Lai izvairītos no SQL injekcijām, visi dati pirms to ievietošanas SQL pieprasījumā ir jāapstrādā ar funkciju mysql_real_escape_string.
XSS – Cross Site Scripting
Viena no biežākajām ievainojamībām web-lapās ir tieši XSS – JavaScript koda injekcija, kas ļauj vizuāli izmainīt web-lapu, pārvirzīt tās apmeklētājus vai iegūt informāciju par tiem, nolasīt cookie datus un izmantot visas pārējās JavaScript iespējas. Piemēram, slikti aizsargātā lapā, apmeklētājs var pievienojot komentāru norādīt savu vārdu kā <script>window.location=”http://someplace.com”;
<script>, kā rezultātā pie komentāru apskates visi apmeklētāji tiks pārsūtīti uz citu lapu. Par dažādiem XSS piemēriem var palasīties iekš http://ha.ckers.org/xss.html. Tāpēc visi dati pirms izvadīšanas web-lapā ir jāapstrādā vismaz ar funkciju htmlentities().
Aizsardzība pret nozagto sesiju lietošanu
Parasti pēc sesijas izveidošanas lietotāja pārlūkprogrammā tiek saglabāts cookie ar sesijas ID, kas pēc noklusējuma ir vienīgais veids lai noteiktu, ka tieši šim lietotājam atbilst konkrētā sesija ar visu tajā esošo informāciju. Ja ļaundarim izdodās uzzināt šo sesijas ID (kas var būt izdarāms gan ar SQL injekciju, gan, visbiežāk, ar XSS, gan jebkādā veidā nolasot cookie failus no lietotāja datora), tad viņš norāda tādu pašu ID savā pārlūkprogrammā un iegūst no dotās web-lapas to pašu, ko cietušais lietotājs, piemēram, pieeju pie administrēšanas paneļa vai profilu forumā.
Pilnībā izslēgt jebkādu iespēju nozagt sesijas ID un/vai jebkurus citus cookie datus ir gandrīz neiespējami un tāpēc ir jāparūpējas par aizliegumu izmantot vienu sesiju vairākos datoros. Populārākais un, iespējams, labākais risinājums ir pie sesijas izveidošanas (piemēram, pēc ielogošanās formas) saglabāt lietotāja IP adresi un pie katras nākamās lapas ielādes to salīdzināt ar faktisko IP adresi, un gadījumā, ja abas IP nesakrīt, izdzēst sesiju.
Paroļu šifrēšana
Pašsaprotami, ka paroles nedrīkst tikt glabātas tīrā teksta veidā un tām ir jābūt šifrētam vismaz ar MD5 algoritmu, bet arī tas nav drošs risinājums, jo izmantojot brute-force metodi, pat septiņu simbolu paroles atminēšanai nav nepieciešams vairāk par dažām stundām uz viduvējas veiktspējas datora.
Tādēļ parolēm ir obligāti jāpievieno tā saucamais salt, kas ir papildus simboli pie paroles un padara to garāku lai padarītu paroles atminēšanu neiespējamu gadījumos, kad ļaundarim ir zināms tikai paroles hash. Piemērs:
$password = 'qwerty'; // Lietotāja ievadītā parole $salt = md5($username.'#!'); // SALT no lietotāja vārda un divi papildus simboli $password = MD5($password.$salt); // Galējais paroles hash
Rezultātā ļaundarim ir jāatmin hash`a vērtību nevis vienkāršai 6 simbolu parolei, bet nu jau 26 simbolu parolei, kas ir praktiski neiespējami bez pilnas pieejas pie visas datu bāzes un web-lapas izejas koda.
Previous Articles
Sveicināts
Šeit es mēģinu pierakstīt dažādas lietas sakarā ar web-izstrādi - skriptus, padomus, funkcijas. Noderēs gan man, gan Tev.


