Þetta er umræða helst ætluð stjórnendum vefsíðna og álíka og jafnvel ætlað líka til góðra vefforritara.

Ég hef mikið tekið eftir því að íslenskar torrentsíður séu hakkaðar og álíka, enda hefur það verið niðurfall mjög margra vefsíðna (nýasta tilfellið er icebits.net) og ástæðan fyrir því er ekkert sérstaklega flókin.

• Hakkarar hakka “because they can”, til að sýna sig og álíka, þeir sem skemma eru svokallaðir black hat's ( http://en.wikipedia.org/wiki/Black_hat ), svo eru til hakkarar sem eru kallaðir white hats ( http://en.wikipedia.org/wiki/White_hat ), en þeir hakka til að finna galla og tilkynna þá til viðkomandi aðila svo villan sé löguð (like me).

• Notendur, lykilorð þarf ekki að vera orð, það má vera setning! (nema fávita forritarar takmarki stafafjölda sem er fáránlegt og þá má lemja þá með mínu leyfi).

== Tæknilegi Hlutinn ==

• Það að getað “hakkað” vefsíðu er í langflestum tilfella vegna þess að eitthverstaðar eru gögn send beint, óhreinsuð (unescaped) í gagnagrunn frá notanda, og það jafnvel þótt að regla í forritun sé að treista aldrei notandanum. Það að “esceipa” streng frá notanda er fáránlega einfalt, þ.e.a.s. ALLTAF þegar á að senda streng í gagnagrunn, hvort sem þú eða notandi hafi gert hann (já líka hardcoded strengi) þá á að esceipa hann.
- Afhverju?: vegna þess að ef notandi getur sent óesceipuð gögn í gagnagrunn þá getur hann sent hvaða skipun sem er í gagnagrunninn. sem er hræðilegt. Ég skal koma með dæmi:
$query = “SELECT * FROM `kex` WHERE `drasl` = '” . $_POST['meh'] . “'”; þessi lína er einföld en stórhættuleg, ég meina auðvitað virkar hún EN hvað ef notandinn sendi ekki bara texta, bara með því að setja 0'; í textann þá er hann búinn að loka sql beiðninni og getur bætt við sinni egin t.d. ‘DROP TABLE `kex`; og þá hverfur taflan með öllu en það eina sem hefði þurfað til að koma í veg fyrir þetta er mysql_real_escape_string, dæmi:
$query = “SELECT * FROM `kex` WHERE `drasl` = ’” . mysql_real_escape_string($_POST['meh']) . “'”; og þá er hættan á mysql “injection” pretty much horfin. það að setja þetta þýðir að allir mysql “control characters” eru “escaped” úr textanum og sendir í gagnagrunninn með \ á undan sér sem gerir þá skaðlausa.
Mæli með því að lesa: http://php.net/manual/en/function.mysql-real-escape-string.php og http://www.php.net/manual/en/security.database.sql-injection.php

• Í öllum bænum geymið lykilorð dulkóðuð, með óviðsnúanlegri dulkóðun (hash) og NEI ekki nota md5 það er ekki öruggt síðan 1995 ( http://en.wikipedia.org/wiki/MD5#Collision_vulnerability ) en er samt í notkun á ÖLLUM núverandi torrentsíðum. Það að fá lykilorð úr md5 tekur yfirleitt bara google leit eða 1-4 klst af brute force. LÁGMARKS hash er sha1 en ég mæli mjög mikið með því að geyma lykilorð sem sha512, salta þau vel ( $userpass = $_POST['password'] . $theuserssalt . $_SERVER['HTTP_HOST']; ) og geyma þau í gagnagrunni í reit sem er stilltur á binary(64) (google it if you don't know how) http://i.msdn.microsoft.com/cc164107.fig01(en-us).gif
http://www.developerfusion.com/article/4679/you-want-salt-with-that/3/

• Jafnvel þótt gögnin geymist rétt í gagnagrunni, ekki fara að treista gögnum notenda þar, þau geta ennþá verið hættuleg, en fyrir auðruvísi árás, segjum sem svo að notandi sendi texta sem er með javascript kóða í sér í gagnagrunninn, öll sérmerki eru auðvitað escaped en sjálfkrafa koma þau rétt síðan til baka en þar þá er það á þinni ábyrgð að vera með htmlentities functionið utanum allt sem notendur skrifuðu, því javascript getur gert margt gott en líka margt illt…

• Gerðu það ekki fara að keyra kerfi eða álíka hluti nema þú skiljir AÐ MINNSTA KOSTI 50% hvernig það virkar, fínt á fiktserver en ekki server með þúsundi notenda.

• Vera með testserver, testa ALLAR breitingar ÁÐUR en þær eru gerðar á kerfi með notendum.

• ÖRYGGISAFRIT AF ÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖLLU, skrám, gagnagrunnum, mikilvægum lykilorðum, helst vel læst inní truecrypt container ( http://www.truecrypt.org/ ) og þau helst daglega.
The Aztek