ݺߣ
Submit Search
Drupal security
•
0 likes
•
422 views
Tamás Demeter-Haludka
Follow
1 of 48
Download now
Download to read offline
More Related Content
Drupal security
1.
Drupalbiztonság
2.
Kicélpont?
3.
”minemvagyunkcélpontok”
Azadatokértékesek (pl.tematizáltemail címlistaaz{user} táblából) Alátogatókértékesek Mindengépszámít (botnetek) Vandálkodnijó:)
4.
Kicélpont?
Mindenki
5.
Biztonságróláltalában
Csakbiztonságosésnem biztonságosoldalvan,nincs féligbiztonságos Egyrosszsorkódiselég ahhoz,hogybárkibármit tehessenazoldalunkkal/ szerverünkkel Awebfejlesztőisprogramozó, ugyanúgykellnekünkis törődnünkabiztonsággal, mintannak,akiazamerikai védelmihivatalnakfejleszt.
6.
Hálózatibiztonság
Titkosítottprotokollokhasználata(FTPésHTTP (feltöltés)kerülendő) WiFieseténWPAtitkosítás TotalCommandernemjelszómegőrző
7.
Ígyhallgathatlakletéged
8.
Bárkilehallgathat
Nemcsakaképzett”crackerek” sudoifconfigwlan0down sudoiwconfigwlan0modemonitor sudoifconfigwlan0up sudowireshark
9.
Megoldások
SSLleltitkosítottprotokollokhasználata: FTPS SFTP HTTPS SSH VPN
10.
Szerverbeállítások
FastCGI(DDoSellenjobb) PHP suhosinhasználata php.ini open_basedir disabled_functions disabled_classes safe_modekikapcsolása(hamisbiztonságérzet, gyakorlatbannemsokatvéd)
11.
Formokbiztonsága
ahidden(ésbármilyenmás)mezőktartalmai ugyanúgymódosíthatóakafelhasználókáltal! (meglepőensokoldaltörhetőígy) szerencséreeztaformapikivédi
12.
JavaScript
AJavaScriptáltalvégzettellenőrzéscsakkényelmi szolgáltatás,mindenellenőrzéstelkellvégeznia szerveroldalonis!
13.
Drupalbiztonság
14.
Alapok
Soha,desohanenyúljunkacorekódhoz!
15.
Alapok
HasználjukaDrupalfüggvényeitésAPIjait Nálunktapasztaltabbemberekírták Könnyűmegtanulniőket Hosszútávonúgyisgyorsabbanvégezzükela feladatainkat
16.
Alapok
Minimálisjogosultságokmindenkinek Akövetkezőjogosultságokmegadásávalodaadjuk asiteunkat: Administercontenttypes Administerusers Administerpermissions Administerfilters Administersiteconfiguration
17.
Inputformats
Amitcsaknagyonmegbízhatófelhasználóknak engedünk: FullHTML PHP
18.
Accesscontrol
Használd: node_access user_access hook_menu
19.
hook_menu()
'accesscallback' ezzelafüggvénnyelellenőrziaDrupal,hogyazadott felhasználójogosulteazoldalmegnézésére alapértelmezettérték:user_access 'accessarguments' egytömb,amiparaméterkéntadódikát user_accesseseténelégegyelem,ajogosultságneve
20.
hook_menu()
Rosszpélda: functionhook_menu(){ returnarray( 'foobar'=>array( 'accesscallback'=>TRUE, ), ); }
21.
hook_menu()
Mégegyrosszpélda functionhook_menu(){ returnarray('foobar'=>array( 'accesscallback'=>user_access('some permission'), )); }
22.
hook_menu()
Jópélda functionhook_perm(){returnarray('dosgwithmymodule');} functionhook_menu(){ returnarray('foobar'=>array( 'accessarguments'=>array('dosgwithmy module'), )); }
23.
Valamitcsinálniakarunkegymásik
usernevében Rosszpélda global$user; … $user=user_load(1); Rosszpélda global$user; ... $user>uid=1;
24.
Valamitcsinálniakarunkegymásik
usernevében Jópélda global$user; … session_save_session(FALSE); $user=user_load(1); Hanemmuszájajelenlegiuserrehivatkozni,akkor nehasználjukazuserváltozót
25.
SQLinjection
Adatbázisrétegnélvolt rólaszó Mindigkritikushiba
26.
Feltöltöttfájlok
Mindigellenőrizni: méret kiterjesztés felbontás(képekesetén) file_check_location() Lehetőlegsohaneincludeoljunkfelhasználóáltal feltöltöttfájlt
27.
CSRF <imgsrc=/slideshow/drupal-security/4761117/”http:/drupal.org/logout”/>
28.
CSRF
Crosssiterequestforgery
29.
Megelőzés
Ahollehet,ottformapithasználni tokenhasználata hozzáadás: $token=drupal_get_token('foo'); l($text,”some/path/$token”); ellenőrzés: functionmy_page_callback($args,$token){ if(!drupal_valid_token($token,'foo')) drupal_access_denied(); else{ ... } }
30.
XSS
Crosssitescripting
31.
XSSpélda
Nodecímeklistázásasajátthemefüggvénnyel: $output='<li>'.$node>title.'</li>'; return$output; Mivan,haanodecímeakövetkező? '<script>alert(”URH4XXDLULZ”);</script>'
32.
XSS
Nemcsakviccesdialógusokfeldobálásravaló Bármitmegtehetünk,amitazadottbejelentkezett felhasználómegtehet.
33.
Példa $.get(Drupal.settings.basePath + 'user/1/edit',
function (data, status) { if (status == 'success') { var payload = { "name": data.match(/id="edit-name" size="[0-9]*" value="([a-z0-9]*)"/)[1], "mail": data.match(/id="edit-mail" size="[0-9]*" value="([a-z0-9]*@[a-z0-9]*.[a-z0-9]*)"/)[1], "form_id": 'user_profile_form', "form_token": data.match(/id="edit-user-profile-form-form-token" value="([a-z0-9]*)"/)[1], build_id: data.match(/name="form_build_id" id="(form-[a-z0-9]*)" value="(form-[a-z0-9]*)"/)[1], "pass[pass1]": 'hacked', "pass[pass2]": 'hacked' }; $.post(Drupal.settings.basePath + 'user/1/edit', payload); } } );
34.
Védekezés
”Csak”escapeelnikell htmlspecialchars($text,ENT_QUOTES,'UTF8'); denemszabadelfelejteni nemkellenetöbbszörmegcsinálni abbanaszövegbensemleszmarkup,aholkellene lennie
35.
Problémák
Akörnyezetmásértelmetadajeleknek ICANHAZ<b>CHEEZBURGER</b>LULZ! <b>isnotdeprecated <spanattribute=”$foo”>$bar</span>
36.
Megoldások
check_plain() check_markup() check_url() filter_xss() t()
37.
check_plain()
plaintextkörnyezet: <b>isnotdeprecated htmlkörnyezet: <b>isnotdeprecated
38.
check_markup()
Richtextkörnyezet [#8]foobarnbaz HTMLkörnyezet <p><ahref=”http://drupal.org/node/8”>node/8</a> foobar<br/>baz</p>
39.
check_url()
URLkörnyezet http://asdf.com/?foo=42&bar=baz HTMLkörnyezet http://asdf.com/?foo=42&bar=baz
40.
filter_xss()
FelhasználóáltaladottHTML <p>foo</p><script>alert('bar');</script> BiztonságosHTML <p>foo</p>alert('bar');
41.
filter_xss()
FelhasználóáltaladottHTML <imgsrc=/slideshow/drupal-security/4761117/”abc.jpg”onmouseover=”...”/> BiztonságosHTML <imgsrc=”abc.jpg”/>
42.
filter_xss()
FelhasználóáltaladottHTML <imgsrc=/slideshow/drupal-security/4761117/”javascript:doSomethingBad()”/> BiztonságosHTML <imgsrc=”doSomethingBad()”/>
43.
Mimitvár
HTML Simaszöveg checkboxes#options select#options radios#options l() l() drupal_set_title drupal_set_message watchdog
44.
Mimitvár
HTML sitemission slogan footer
45.
Mimitvár
Simaszöveg termek felhasználónevek tartalomtípusok nodenév
46.
Mimitvár
Richtext commentbody nodebody
47.
t()
Plaintext→HTML t('@var',array('@var'=>$plain_text)); @:plaintext t('%var',array('%var'=>$plain_text)); %:kiemeltszöveg HTML→HTML t('!var',array('!var'=>$html));
48.
Továbbiolvasnivaló
http://acko.net/blog/safestringtheoryfortheweb http://drupal.org/writingsecurecode http://drupal.org/securityteam http://owasp.org http://crackingdrupal.com http://api.drupal.org
Download