• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Drupal kurzus security (Drupal 7)
 

Drupal kurzus security (Drupal 7)

on

  • 631 views

 

Statistics

Views

Total Views
631
Views on SlideShare
621
Embed Views
10

Actions

Likes
0
Downloads
4
Comments
0

1 Embed 10

http://coderwall.com 10

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Drupal kurzus security (Drupal 7) Drupal kurzus security (Drupal 7) Presentation Transcript

    • Drupal biztonságTuesday, April 3, 12
    • Ki célpont?Tuesday, April 3, 12
    • ”mi nem vagyunk célpontok” n Az adatok értékesek (pl. tematizált email címlista az {user} táblából) n A látogatók értékesek n Minden gép számít (botnetek) n Vandálkodni jó :)Tuesday, April 3, 12
    • Ki célpont? MindenkiTuesday, April 3, 12
    • Biztonságról általában n Csak biztonságos és nem biztonságos oldal van, nincs félig biztonságos n Egy rossz sor kód is elég ahhoz, hogy bárki bármit tehessen az oldalunkkal / szerverünkkel n 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.Tuesday, April 3, 12
    • Hálózati biztonság n Titkosított protokollok használata (FTP és HTTP (feltöltés) kerülendő) n Wi-Fi esetén WPA titkosítás n Total Commander nem jelszómegőrzőTuesday, April 3, 12
    • Így hallgathatlak le tégedTuesday, April 3, 12
    • Bárki lehallgathat n Nem csak a képzett ”crackerek” sudo ifconfig wlan0 down sudo iwconfig wlan0 mode monitor sudo ifconfig wlan0 up sudo wiresharkTuesday, April 3, 12
    • Megoldások n SSL-lel titkosított protokollok használata: n FTPS n SFTP n HTTPS n SSH n VPNTuesday, April 3, 12
    • Szerverbeállítások n FastCGI (DDoS ellen jobb) n PHP n suhosin használata n php.ini n open_basedir n disabled_functions n disabled_classes n safe_mode kikapcsolása (hamis biztonságérzet, gyakorlatban nem sokat véd)Tuesday, April 3, 12
    • Formok biztonsága n 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) n szerencsére ezt a form api kivédiTuesday, April 3, 12
    • Formok biztonsága n Bizonyos érzékeny adatok (pl.: bankkártya szám) beviteli mezőjénél az autocomplete=”off” attribútum használataTuesday, April 3, 12
    • HTTP kérések n Írás soha ne legyen GET n Létrehozás, szerkesztés az POST (form miatt), de a törlés is legyen az! n Nem árt, ha rákérdezünk a felhasználóra törlés előtt (Drupalban: confirm_form() függvény) n Ha bejut valamilyen bot, akkor a linkeken végigmegy → ha ez egy admin felület, akkor törölheti az összes tartalmatTuesday, April 3, 12
    • HTTP kérések n Érzékeny adatot URL-ben soha n http://example.com/register.php? username=foo&password=bar&mail=foobar@example.comTuesday, April 3, 12
    • JavaScript n 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!Tuesday, April 3, 12
    • JavaScript n Valós életből vett ellenpélda: <script language="javascript"> <!--// /*This Script allows people to enter by using a form that asks for a UserID and Password*/ function pasuser(form) { if (form.id.value=="buyers") { if (form.pass.value=="gov1996") { location="http://officers.federalsuppliers.com/agents.html" } else { alert("Invalid Password") } } else { alert("Invalid UserID") } } //--> </script>Tuesday, April 3, 12
    • File inclusion n File-t SOHA nem include-olunk URL alapján n Triviális példa: http://example.com/index.php?p=../../../../etc/ passwd http://example.com/index.php?p=index.phpTuesday, April 3, 12
    • Drupal biztonságTuesday, April 3, 12
    • Alapok n Soha, de soha ne nyúljunk a core kódhoz!Tuesday, April 3, 12
    • Alapok n Használjuk a Drupal függvényeit és API-jait n Nálunk tapasztaltabb emberek írták n Könnyű megtanulni őket n Hosszú távon úgyis gyorsabban végezzük el a feladatainkatTuesday, April 3, 12
    • Alapok n Minimális jogosultságok mindenkinek n A következő jogosultságok megadásával odaadjuk a siteunkat: n Administer content types n Administer users n Administer permissions n Administer filters n Administer site configurationTuesday, April 3, 12
    • Input formats n Amit csak nagyon megbízható felhasználóknak engedünk: n Full HTML n PHPTuesday, April 3, 12
    • Access control n Használd: n node_access n user_access n hook_menuTuesday, April 3, 12
    • hook_menu() n access callback n ezzel a függvénnyel ellenőrzi a Drupal, hogy az adott felhasználó jogosult-e az oldal megnézésére n alapértelmezett érték: user_access n access arguments n egy tömb, ami paraméterként adódik át n user_access esetén elég egy elem, a jogosultság neveTuesday, April 3, 12
    • hook_menu() n Rossz példa: function hook_menu() { return array( foobar => array( access callback => TRUE, ), ); }Tuesday, April 3, 12
    • hook_menu() n Még egy rossz példa function hook_menu() { return array(foobar => array( access callback => user_access(some permission), )); }Tuesday, April 3, 12
    • hook_menu() n 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), )); }Tuesday, April 3, 12
    • Valamit csinálni akarunk egy másik user nevében n Rossz példa global $user; … $user = user_load(1); n Rossz példa global $user; ... $user->uid = 1;Tuesday, April 3, 12
    • Valamit csinálni akarunk egy másik user nevében n Jó példa global $user; … drupal_save_session(FALSE); $user = user_load(1); n Ha nem muszáj a jelenlegi userre hivatkozni, akkor ne használjuk az user változótTuesday, April 3, 12
    • SQL injection n Nem megfelelően kezelt sztring beillesztése SQL lekérésbe n Mindig kritikus hibaTuesday, April 3, 12
    • SQL injection n mysqli_query(”SELECT * FROM node WHERE nid = ” . $_GET[nid]); n Ez ilyesztőTuesday, April 3, 12
    • SQL injection n mysqli_query(”SELECT * FROM node WHERE nid = ” . $_REQUEST[nid]); n Ez még ilyesztőbbTuesday, April 3, 12
    • SQL injection n mysqli_query($_REQUEST[searchQuery]); n Ez talán a legrémesebb. n Van ilyen: Google ”inurl:SELECT inurl:FROM inurl:WHERE”Tuesday, April 3, 12
    • SQL injection n Nem SQL injection, de sok kezdő fejlesztő beleszalad n SELECT * FROM ”user” WHERE ”name” LIKE % $username%Tuesday, April 3, 12
    • Feltöltött fájlok n Mindig ellenőrizni: n méret n kiterjesztés n felbontás (képek esetén) n file_check_location() n Lehetőleg soha ne include-oljunk felhasználó által feltöltött fájltTuesday, April 3, 12
    • CSRF <img src=”http://drupal.org/logout”/>Tuesday, April 3, 12
    • CSRF n Cross-site request forgeryTuesday, April 3, 12
    • Megelőzés n Ahol lehet, ott form api-t használni n token használata n hozzáadás: $token = drupal_get_token(foo); l($text, ”some/path/$token”); n ellenőrzés: function my_page_callback($args, $token) { if(!drupal_valid_token($token, foo)) drupal_access_denied(); else { ... } }Tuesday, April 3, 12
    • XSS n Cross site scriptingTuesday, April 3, 12
    • XSS példa n Node címek listázása saját theme függvénnyel: $output = <li> . $node->title . </li>; return $output; n Mi van, ha a node címe a következő? <script>alert(”U R H4XXD LULZ”); </script>Tuesday, April 3, 12
    • XSS n Nem csak vicces dialógusok feldobálásra való n Bármit megtehetünk, amit az adott bejelentkezett felhasználó megtehet.Tuesday, April 3, 12
    • 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); } } );Tuesday, April 3, 12
    • Védekezés n ”Csak” escape-elni kell n htmlspecialchars($text, ENT_QUOTES, UTF-8); n de nem szabad elfelejteni n nem kellene többször megcsinálni n abban a szövegben sem lesz markup, ahol kellene lennieTuesday, April 3, 12
    • Problémák n 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>Tuesday, April 3, 12
    • Megoldások n check_plain() n check_markup() n check_url() n filter_xss() n t()Tuesday, April 3, 12
    • check_plain() n plain text környezet: <b> is not deprecated n html környezet: &lt;b&gt; is not deprecatedTuesday, April 3, 12
    • check_markup() n Rich text környezet [#8] foobar n baz n HTML környezet <p> <a href=”http://drupal.org/node/8”> node/8 </a> foobar <br /> baz </p>Tuesday, April 3, 12
    • check_url() n URL környezet http://asdf.com/?foo=42&bar=baz n HTML környezet http://asdf.com/?foo=42&amp;bar=bazTuesday, April 3, 12
    • filter_xss() n Felhasználó által adott HTML <p>foo</p><script>alert(bar);</script> n Biztonságos HTML <p>foo</p>alert(bar);Tuesday, April 3, 12
    • filter_xss() n Felhasználó által adott HTML <img src=”abc.jpg” onmouseover=”...” /> n Biztonságos HTML <img src=”abc.jpg” />Tuesday, April 3, 12
    • filter_xss() n Felhasználó által adott HTML <img src=”javascript:doSomethingBad()” /> n Biztonságos HTML <img src=”doSomethingBad()” />Tuesday, April 3, 12
    • Mi mit vár n HTML n Sima szöveg n checkboxes #options n select #options n radios #options n l() n l() n drupal_set_title n drupal_set_message n watchdogTuesday, April 3, 12
    • Mi mit vár n HTML n site mission n slogan n footerTuesday, April 3, 12
    • Mi mit vár n Sima szöveg n termek n felhasználónevek n tartalomtípusok n node névTuesday, April 3, 12
    • Mi mit vár n Rich text n comment body n node bodyTuesday, April 3, 12
    • t() n Plain text → HTML n t(@var, array(@var => $plain_text)); n @: plain text n t(%var, array(%var => $plain_text)); n %: kiemelt szöveg n HTML → HTML n t(!var, array(!var => $html));Tuesday, April 3, 12
    • .htaccess n Nagyon fontos fájl! n Ha nincs ott, akkor könnyen okozhat sebezhetőséget n pl.: directory listing + backup a settings.php-rőlTuesday, April 3, 12
    • Példák sebezhetőségekre n Webshopnál az áru mennyisége nem ”1”, hanem ”.1” n Webshop: ár eltárolása hidden mezőben, átírva 0-ra ingyen lehet rendelniTuesday, April 3, 12
    • Példák sebezhetőségekre n Sütiben felhasználónév vagy userid eltárolása n Sok oldalnál nyitvahagyják a memcache portját (11211), így a cache-elt adatok könnyedén manipulálhatók.Tuesday, April 3, 12
    • További olvasnivaló n http://acko.net/blog/safe-string-theory-for-the-web n http://drupal.org/writing-secure-code n http://drupal.org/security-team n http://owasp.org n http://crackingdrupal.com n http://api.drupal.orgTuesday, April 3, 12
    • recruitment@pronovix.com Belga-magyar cég Közép-Európa egyik legjobb csapata <15 fő Utazás, csoki, sörTuesday, April 3, 12