Drupal kurzus security (Drupal 7)

2,197 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,197
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Drupal kurzus security (Drupal 7)

  1. 1. Drupal biztonságTuesday, April 3, 12
  2. 2. Ki célpont?Tuesday, April 3, 12
  3. 3. ”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
  4. 4. Ki célpont? MindenkiTuesday, April 3, 12
  5. 5. 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
  6. 6. 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
  7. 7. Így hallgathatlak le tégedTuesday, April 3, 12
  8. 8. 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
  9. 9. Megoldások n SSL-lel titkosított protokollok használata: n FTPS n SFTP n HTTPS n SSH n VPNTuesday, April 3, 12
  10. 10. 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
  11. 11. 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
  12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. Drupal biztonságTuesday, April 3, 12
  19. 19. Alapok n Soha, de soha ne nyúljunk a core kódhoz!Tuesday, April 3, 12
  20. 20. 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
  21. 21. 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
  22. 22. Input formats n Amit csak nagyon megbízható felhasználóknak engedünk: n Full HTML n PHPTuesday, April 3, 12
  23. 23. Access control n Használd: n node_access n user_access n hook_menuTuesday, April 3, 12
  24. 24. 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
  25. 25. hook_menu() n Rossz példa: function hook_menu() { return array( foobar => array( access callback => TRUE, ), ); }Tuesday, April 3, 12
  26. 26. 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
  27. 27. 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
  28. 28. 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
  29. 29. 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
  30. 30. SQL injection n Nem megfelelően kezelt sztring beillesztése SQL lekérésbe n Mindig kritikus hibaTuesday, April 3, 12
  31. 31. SQL injection n mysqli_query(”SELECT * FROM node WHERE nid = ” . $_GET[nid]); n Ez ilyesztőTuesday, April 3, 12
  32. 32. SQL injection n mysqli_query(”SELECT * FROM node WHERE nid = ” . $_REQUEST[nid]); n Ez még ilyesztőbbTuesday, April 3, 12
  33. 33. 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
  34. 34. SQL injection n Nem SQL injection, de sok kezdő fejlesztő beleszalad n SELECT * FROM ”user” WHERE ”name” LIKE % $username%Tuesday, April 3, 12
  35. 35. 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
  36. 36. CSRF <img src=”http://drupal.org/logout”/>Tuesday, April 3, 12
  37. 37. CSRF n Cross-site request forgeryTuesday, April 3, 12
  38. 38. 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
  39. 39. XSS n Cross site scriptingTuesday, April 3, 12
  40. 40. 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
  41. 41. 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
  42. 42. 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
  43. 43. 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
  44. 44. 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
  45. 45. Megoldások n check_plain() n check_markup() n check_url() n filter_xss() n t()Tuesday, April 3, 12
  46. 46. check_plain() n plain text környezet: <b> is not deprecated n html környezet: &lt;b&gt; is not deprecatedTuesday, April 3, 12
  47. 47. 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
  48. 48. 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
  49. 49. 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
  50. 50. 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
  51. 51. filter_xss() n Felhasználó által adott HTML <img src=”javascript:doSomethingBad()” /> n Biztonságos HTML <img src=”doSomethingBad()” />Tuesday, April 3, 12
  52. 52. 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
  53. 53. Mi mit vár n HTML n site mission n slogan n footerTuesday, April 3, 12
  54. 54. Mi mit vár n Sima szöveg n termek n felhasználónevek n tartalomtípusok n node névTuesday, April 3, 12
  55. 55. Mi mit vár n Rich text n comment body n node bodyTuesday, April 3, 12
  56. 56. 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
  57. 57. .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
  58. 58. 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
  59. 59. 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
  60. 60. 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
  61. 61. 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

×