3. ”mi nem vagyunk célpontok”
Az adatok értékesek
(pl. tematizált email
címlista az {user}
táblából)
A látogatók értékesek
Minden gép számít
(botnetek)
Vandálkodni jó :)
5. Biztonságról általában
Csak biztonságos és nem
biztonságos oldal van, nincs
félig biztonságos
Egy rossz sor kód is elég
ahhoz, hogy bárki bármit
tehessen az oldalunkkal /
szerverünkkel
A webfejlesztő is programozó,
ugyanúgy kell nekünk is
törődnünk a biztonsággal,
mint annak, aki az amerikai
védelmi hivatalnak fejleszt.
6. Hálózati biztonság
Titkosított protokollok használata (FTP és HTTP
(feltöltés) kerülendő)
WiFi esetén WPA titkosítás
Total Commander nem jelszómegőrző
10. Szerverbeállítások
FastCGI (DDoS ellen jobb)
PHP
suhosin használata
php.ini
open_basedir
disabled_functions
disabled_classes
safe_mode kikapcsolása (hamis biztonságérzet,
gyakorlatban nem sokat véd)
11. Formok biztonsága
a hidden (és bármilyen más) mezők tartalmai
ugyanúgy módosíthatóak a felhasználók által!
(meglepően sok oldal törhető így)
szerencsére ezt a form api kivédi
12. JavaScript
A JavaScript által végzett ellenőrzés csak kényelmi
szolgáltatás, minden ellenőrzést el kell végezni a
szerver oldalon is!
14. Alapok
Soha, de soha ne nyúljunk a core kódhoz!
15. Alapok
Használjuk a Drupal függvényeit és APIjait
Nálunk tapasztaltabb emberek írták
Könnyű megtanulni őket
Hosszú távon úgyis gyorsabban végezzük el a
feladatainkat
16. Alapok
Minimális jogosultságok mindenkinek
A következő jogosultságok megadásával odaadjuk
a siteunkat:
Administer content types
Administer users
Administer permissions
Administer filters
Administer site configuration
17. Input formats
Amit csak nagyon megbízható felhasználóknak
engedünk:
Full HTML
PHP
19. hook_menu()
'access callback'
ezzel a függvénnyel ellenőrzi a Drupal, hogy az adott
felhasználó jogosulte az oldal megnézésére
alapértelmezett érték: user_access
'access arguments'
egy tömb, ami paraméterként adódik át
user_access esetén elég egy elem, a jogosultság neve
20. hook_menu()
Rossz példa:
function hook_menu() {
return array(
'foobar' => array(
'access callback' => TRUE,
),
);
}
21. hook_menu()
Még egy rossz példa
function hook_menu() {
return array('foobar' => array(
'access callback' => user_access('some
permission'),
));
}
22. hook_menu()
Jó példa
function hook_perm() { return array('do sg with my module'); }
function hook_menu() {
return array( 'foobar' => array(
'access arguments' => array('do sg with my
module'),
));
}
23. Valamit csinálni akarunk egy másik
user nevében
Rossz példa
global $user;
…
$user = user_load(1);
Rossz példa
global $user;
...
$user>uid = 1;
24. Valamit csinálni akarunk egy másik
user nevében
Jó példa
global $user;
…
session_save_session(FALSE);
$user = user_load(1);
Ha nem muszáj a jelenlegi userre hivatkozni, akkor
ne használjuk az user változót
25. SQL injection
Adatbázisrétegnél volt
róla szó
Mindig kritikus hiba
26. Feltöltött fájlok
Mindig ellenőrizni:
méret
kiterjesztés
felbontás (képek esetén)
file_check_location()
Lehetőleg soha ne includeoljunk felhasználó által
feltöltött fájlt
31. XSS példa
Node címek listázása saját theme függvénnyel:
$output = '<li>' . $node>title . '</li>';
return $output;
Mi van, ha a node címe a következő?
'<script>alert(”U R H4XXD LULZ”);</script>'
32. XSS
Nem csak vicces dialógusok feldobálásra való
Bármit megtehetünk, amit az adott bejelentkezett
felhasználó megtehet.
34. Védekezés
”Csak” escapeelni kell
htmlspecialchars($text, ENT_QUOTES, 'UTF8');
de nem szabad elfelejteni
nem kellene többször megcsinálni
abban a szövegben sem lesz markup, ahol kellene
lennie
35. Problémák
A környezet más értelmet ad a jeleknek
I CAN HAZ <b>CHEEZBURGER</b> LULZ!
<b> is not deprecated
<span attribute=”$foo”>$bar</span>