{"id":20964,"date":"2014-10-17T14:48:33","date_gmt":"2014-10-17T13:48:33","guid":{"rendered":"https:\/\/www.inovex.de\/\/?p=55"},"modified":"2014-10-17T14:48:33","modified_gmt":"2014-10-17T13:48:33","slug":"die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/","title":{"rendered":"Die potenzielle Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets"},"content":{"rendered":"<p>Eine <em>Default<\/em>-Sicherheitsl\u00fccke f\u00fcr <strong>Cross-Site-Request-Forgery-Angriffe in Liferay<\/strong> kann zu einem Problem werden, je nachdem, mit welchem Framework man sein Portlet realisiert und welche Anforderungen umgesetzt werden m\u00fcssen. Erm\u00f6glicht wird das durch die Details der Implementierung, die eigentlich daf\u00fcr vorgesehen sind, diese Angriffe abzuwehren. Ob man von dieser\u00a0Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll dieser Artikel zeigen.<!--more--><\/p>\n<p>Cross-Site-Request-Forgery (CSRF)-Angriffe sind Aktionen, die einem authentifizierten User ungewollt untergeschoben werden.<\/p>\n<p><a href=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/02\/cross-site-forgery.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-117\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2015\/02\/cross-site-forgery-300x230.png\" alt=\"Cross-Site Forgery\" width=\"315\" height=\"242\" \/><\/a><\/p>\n<p>Dabei ist es nicht zwingend notwendig, dass zuvor z. B. die Web-Applikation mittels XSS kompromittiert wurde. Es reicht manchmal schon aus, auf einen pr\u00e4parierten Link in einer scheinbar vertrauensw\u00fcrdigen E-Mail zu klicken. Die Auswirkungen dieser Angriffe k\u00f6nnen sehr weitreichend sein. Das Risikopotenzial sollte jeder Entwickler absch\u00e4tzen, indem er davon ausgeht, dass jede implementierte Aktion ein potenzielles Angriffsziel darstellt.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#Was-bietet-Liferay-gegen-CSRF-Angriffe\" >Was bietet Liferay gegen CSRF-Angriffe?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#Gefahr-erkannt-Gefahr-Gefahr-gebannt\" >Gefahr erkannt Gefahr, Gefahr gebannt?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#Liferay-620-GA1-Implementierungsdetails\" >Liferay 6.2.0 GA1 Implementierungsdetails<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#Hinweis-fuer-Liferay-60X\" >Hinweis f\u00fcr Liferay 6.0.X<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Was-bietet-Liferay-gegen-CSRF-Angriffe\"><\/span>Was bietet Liferay gegen CSRF-Angriffe?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ganz wehrlos ist man als Liferay\/Portlet-Entwickler nicht. Aktuelle Versionen von Liferay implementieren das Synchronizer Token Pattern, um CSRF-Angriffe zu verhindern. Standardm\u00e4\u00dfig wird bei allen ActionRequests gepr\u00fcft, ob das in der URL enthaltene Token dem Gegenst\u00fcck in der Session entspricht. Die Generierung und Pr\u00fcfung dieses Tokens \u00fcbernimmt eine entsprechende Implementierung des Interfaces com.liferay.portal.security.auth.AuthToken., die unter der Portal Property auth.token.impl konfiguriert werden kann. Das Open Web Application Security Project (OWASP) empfiehlt diese Art der Absicherung. Das lesenswerte Prevention Cheat Sheet bietet einen \u00dcberblick der existierenden Abwehrstrategien und beschreibt auch, aus welchen Gr\u00fcnden einige Methoden g\u00e4nzlich ungeeignet sind.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Gefahr-erkannt-Gefahr-Gefahr-gebannt\"><\/span>Gefahr erkannt Gefahr, Gefahr gebannt?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Auf den ersten Blick sieht es so aus, dass damit das Problem mit CSRF-Angriffen in Liferay bereits gel\u00f6st ist und man sich als Entwickler keine Sorgen mehr machen muss. Leider stimmt das nicht immer.<\/p>\n<p>Manche Situationen erfordern, dass bei der Pr\u00fcfung des Tokens Ausnahmen gemacht werden. Hierf\u00fcr gibt es in der portal.properties-Datei von Liferay zwei Konfigurationsm\u00f6glichkeiten. Mit dem Eintrag der Portlet ID als Wert f\u00fcr auth.token.ignore.portlets kann die Pr\u00fcfung f\u00fcr einzelne Portlets deaktiviert werden. Ausnahmen k\u00f6nnen aber auch f\u00fcr einzelne Actions definiert werden. Die Liferay-Standardkonfiguration beinhaltet bereits eine ganze Liste mit mehr als 10 Ausnahmen f\u00fcr Portlets, die mit Liferay ausgeliefert werden. Hier ein kleiner Auszug:<\/p>\n<pre class=\"lang:default decode:true \">auth.token.ignore.actions=\\\n\n...\n\n\/login\/login,\\\n\n...<\/pre>\n<p>Die Action <span class=\"lang:java decode:true crayon-inline \">\/login\/login<\/span> z. B. ist aus folgendem Grund hier aufgef\u00fchrt: W\u00e4hrend der Anmeldung wird die bestehende Session geschlossen und eine neue Session wird angelegt. Dieses Vorgehen ist n\u00f6tig, um Session Fixation Angriffe zu verhindern. Weil die Session quasi zerst\u00f6rt wird, kann aber kein Vergleich mit dem Token stattfinden. Sicher gibt es bei den anderen aufgef\u00fchrten Aktionen triftige Gr\u00fcnde f\u00fcr, dass hier ebenfalls eine Ausnahme n\u00f6tig ist.<\/p>\n<p>Besonders wenn man ein eigenes Login-Portlet umsetzen m\u00f6chte oder bestimmte Actions auch dann aufgerufen werden k\u00f6nnen m\u00fcssen, wenn z. B. die Session abgelaufen ist, m\u00fcssen entsprechende Ausnahmen konfiguriert werden. Hierbei muss bewertet werden, ob das ganze Portlet auf die Ignore-Liste gesetzt werden kann oder nur einzelne Actions von der Pr\u00fcfung ausgenommen werden.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Liferay-620-GA1-Implementierungsdetails\"><\/span>Liferay 6.2.0 GA1 Implementierungsdetails<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ein Blick in den Quellcode, genauer: in die relevante Methode <span class=\"lang:java decode:true crayon-inline \">AuthTokenWhitelistImpl.isPortletCSRFWhitelisted(long, String, String)<\/span> , zeigt wie diese Pr\u00fcfung umgesetzt wurde:<\/p>\n<pre class=\"lang:java decode:true \">public boolean isPortletCSRFWhitelisted(\n\nlong companyId, String portletId, String strutsAction)\n\nString rootPortletId = PortletConstants.getRootPortletId(portletId);\n\nSet whitelist = getPortletCSRFWhitelist();\n\nif (whitelist.contains(rootPortletId)) {\n\nreturn true;\n\nif (Validator.isNotNull(strutsAction)) {\n\nSet whitelistActions = getPortletCSRFWhitelistActions();\n\nif (whitelistActions.contains(strutsAction) &amp;amp;&amp;amp; isValidStrutsAction(companyId, rootPortletId, strutsAction)) {\n\nreturn true;\n\n}\n\n}\n\nreturn false;\n\n}\n\n<\/pre>\n<p>Neben der Pr\u00fcfung, ob die whitelistActions-Liste die strutsAction enth\u00e4lt, wird auch gepr\u00fcft, ob es eine g\u00fcltige strutsAction ist. Diese zus\u00e4tzliche Pr\u00fcfung verhindert, dass der Parameter bei Nicht-Struts-Portlets f\u00fcr die Umgehung des Cross-Site-Request-Forgery-Schutzes zweckentfremdet wird.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Hinweis-fuer-Liferay-60X\"><\/span>Hinweis f\u00fcr Liferay 6.0.X<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Deutlich schlechter sieht die Situation bei einer eventuell noch vereinzelt eingesetzten \u00e4lteren Liferay Version wie 6.0.12 EE aus. Hier wird letztendlich nur nach einem Request Parameter struts_action mit dem PortletNamespace als Prefix gesucht. Dieser wird dann mit der Liste der ignorierten Actions verglichen. Die Pr\u00fcfung des Tokens findet dann nicht statt, wenn ein passender Eintrag vorhanden ist.<\/p>\n<p>F\u00fcr Struts-Portlets ist diese Art der Pr\u00fcfung hinreichend sicher, weil mit diesem Parameter direkt die auszuf\u00fchrende PortletAction bestimmt wird. Bei den meisten anderen Framewors hingegen wird ein Parameter, der nicht verwendet wird, einfach ignoriert. Somit ist es bei dieser Liferay-Version m\u00f6glich, die Pr\u00fcfung f\u00fcr alle Nicht-Struts-Portlets g\u00e4nzlich auszuhebeln.<\/p>\n<p>Wie k\u00f6nnen Nicht-Struts-Portlets gesch\u00fctzt werden, wenn Ausnahmen f\u00fcr einzelne Actions n\u00f6tig sind?<\/p>\n<p>Von den zwei Konfigurationsm\u00f6glichkeiten bleibt somit f\u00fcr Nicht-Struts-Portlets nur noch die Abschaltung der Pr\u00fcfung f\u00fcr das ganze Portlet per Eintrag der PortletId in die Liste auth.token.ignore.portlets. Leider wird dann nicht nur die Pr\u00fcfung des p_auth Parameters nicht mehr durchgef\u00fchrt, der Parameter wird gar nicht mehr automatisch generiert. Damit man diesen Parameter in einem ActionFilter f\u00fcr die Pr\u00fcfung verwenden kann, muss dieser bei sicherheitsrelevanten Actions dieser wieder hinzugef\u00fcgt werden. Etwa so:<\/p>\n<pre class=\"java decode:true \">&lt;c:set var=\"authParam\" value=\"&lt; %=HttpUtil.encodeURL(AuthTokenUtil.getToken(request)) %&gt;\"\/&gt;\n\n&lt;form:form action=\"${actionUrl}&amp;amp;p_auth=${authParam}\" method=\"POST\"&gt;\n\n&lt;input type=\"submit\" name=\"submit\" value=\"OK\" \/&gt;\n\n&lt;\/form:form&gt;<\/pre>\n<p>Die Pr\u00fcfung, ob das Token g\u00fcltig ist oder die Action ignoriert werden soll, kann dann in einem <span class=\"lang:java decode:true crayon-inline \">javax.portlet.filter.ActionFilter<\/span> implementiert werden.<\/p>\n<pre class=\"lang:java decode:true \">public class CustomCSRFWhitelistActionFilter implements ActionFilter {\n\npublic void doFilter(ActionRequest request, ActionResponse response, FilterChain chain) throws IOException, PortletException {\n\nif (isCSRFTokenValid(request) || isActionWhitelisted(request)) { chain.doFilter(request, response);\n\n} else {\n\n\/\/ ActionRequest wird ignoriert\n\n} }\n\nprotected boolean isCSRFTokenValid(ActionRequest actionRequest) {\n\nHttpServletRequest request =\n\nPortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(actionRequ est));\n\nString csrfToken = ParamUtil.getString(request, \"p_auth\");\n\nreturn csrfToken.equals(getSessionAuthenticationToken(actionRequest)); }&lt;\/code&gt;\n\n&lt;code&gt;\n\nprotected String getSessionAuthenticationToken(ActionRequest actionRrequest) {\n\nHttpSession session =\n\nPortalUtil.getHttpServletRequest(actionRrequest).getSession(false);\n\nif (session != null) {\n\nString tokenKey = WebKeys.AUTHENTICATION_TOKEN.concat(\"#CSRF\");\n\nreturn (String) session.getAttribute(tokenKey); }\n\nelse {\n\nreturn null; }\n\n}\n\nprivate boolean isActionWhitelisted(ActionRequest request) { return false; \/\/ Pr\u00fcfung anhand eigener Logik m\u00f6glich\n\n} }\n\n<\/pre>\n<p>Insgesamt ist es aktuell etwas umst\u00e4ndlich, die skizzierte Anforderung umzusetzen. Sinnvoller w\u00e4re es aus meiner Sicht, wenn man die Kontrolle \u00fcber die Ausnahmen direkt auf Portlet-Ebene h\u00e4tte. Ich habe einen entsprechenden Feature Request LPS-48358 erstellt und freue mich \u00fcber jede Unterst\u00fctzung in Form eines Votes oder erg\u00e4nzenden Kommentaren. Bis dahin hat man nur die M\u00f6glichkeit, die Pr\u00fcfung im ersten Schritt mit einem entsprechenden Eintrag der PortletId in der Portal Property auth.token.ignore.portlets auszuschalten und selbst zu pr\u00fcfen, ob es sich um eine Action handelt, die ignoriert werden kann oder nicht.<\/p>\n<p>GitHub Repository mit Code-Beispiel: <a title=\"GitHub Repository mit Code-Beispiel\" href=\"https:\/\/github.com\/AndreasFriedel\/action-test-portlet\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/AndreasFriedel\/action-test-portlet<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Default-Sicherheitsl\u00fccke f\u00fcr Cross-Site-Request-Forgery-Angriffe in Liferay kann zu einem Problem werden, je nachdem, mit welchem Framework man sein Portlet realisiert und welche Anforderungen umgesetzt werden m\u00fcssen. Erm\u00f6glicht wird das durch die Details der Implementierung, die eigentlich daf\u00fcr vorgesehen sind, diese Angriffe abzuwehren. Ob man von dieser\u00a0Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":11954,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[70],"service":[],"coauthors":[{"id":16,"display_name":"Andreas Friedel","user_nicename":"afriedel"}],"class_list":["post-20964","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-web"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets<\/title>\n<meta name=\"description\" content=\"Ob man von der Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll dieser Artikel zeigen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets\" \/>\n<meta property=\"og:description\" content=\"Ob man von der Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll dieser Artikel zeigen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2014-10-17T13:48:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2300\" \/>\n\t<meta property=\"og:image:height\" content=\"876\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Andreas Friedel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1-1024x390.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andreas Friedel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Andreas Friedel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/\"},\"author\":{\"name\":\"Andreas Friedel\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/398ee16a9fb1cb485579934712c27ad8\"},\"headline\":\"Die potenzielle Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets\",\"datePublished\":\"2014-10-17T13:48:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/\"},\"wordCount\":935,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/inovex-blog-cover-1.jpg\",\"keywords\":[\"Web\"],\"articleSection\":[\"General\",\"Infrastructure\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/\",\"name\":\"Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/inovex-blog-cover-1.jpg\",\"datePublished\":\"2014-10-17T13:48:33+00:00\",\"description\":\"Ob man von der Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll dieser Artikel zeigen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/inovex-blog-cover-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/inovex-blog-cover-1.jpg\",\"width\":2300,\"height\":876,\"caption\":\"inovex Blog Headerbild\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Die potenzielle Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/398ee16a9fb1cb485579934712c27ad8\",\"name\":\"Andreas Friedel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4e7f250868fdc392361bcc41f5d4ece8ee8ff4a21597bda3262791e8f890dd77?s=96&d=retro&r=g2f29438b8045bd69cca0f9b30016895f\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4e7f250868fdc392361bcc41f5d4ece8ee8ff4a21597bda3262791e8f890dd77?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4e7f250868fdc392361bcc41f5d4ece8ee8ff4a21597bda3262791e8f890dd77?s=96&d=retro&r=g\",\"caption\":\"Andreas Friedel\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/afriedel\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets","description":"Ob man von der Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll dieser Artikel zeigen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/","og_locale":"de_DE","og_type":"article","og_title":"Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets","og_description":"Ob man von der Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll dieser Artikel zeigen.","og_url":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2014-10-17T13:48:33+00:00","og_image":[{"width":2300,"height":876,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1.jpg","type":"image\/jpeg"}],"author":"Andreas Friedel","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1-1024x390.jpg","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Andreas Friedel","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten","Written by":"Andreas Friedel"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/"},"author":{"name":"Andreas Friedel","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/398ee16a9fb1cb485579934712c27ad8"},"headline":"Die potenzielle Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets","datePublished":"2014-10-17T13:48:33+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/"},"wordCount":935,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1.jpg","keywords":["Web"],"articleSection":["General","Infrastructure"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/","url":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/","name":"Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1.jpg","datePublished":"2014-10-17T13:48:33+00:00","description":"Ob man von der Cross-Site-Request-Forgery-Sicherheitslu\u0308cke betroffen ist und was man dagegen unternehmen kann, soll dieser Artikel zeigen.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1.jpg","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2017\/09\/inovex-blog-cover-1.jpg","width":2300,"height":876,"caption":"inovex Blog Headerbild"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/die-potenzielle-cross-site-request-forgery-sicherheitslu%cc%88cke-bei-custom-liferay-portlets\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Die potenzielle Cross-Site-Request-Forgery-Sicherheitslu\u0308cke bei Custom Liferay Portlets"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/398ee16a9fb1cb485579934712c27ad8","name":"Andreas Friedel","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/4e7f250868fdc392361bcc41f5d4ece8ee8ff4a21597bda3262791e8f890dd77?s=96&d=retro&r=g2f29438b8045bd69cca0f9b30016895f","url":"https:\/\/secure.gravatar.com\/avatar\/4e7f250868fdc392361bcc41f5d4ece8ee8ff4a21597bda3262791e8f890dd77?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4e7f250868fdc392361bcc41f5d4ece8ee8ff4a21597bda3262791e8f890dd77?s=96&d=retro&r=g","caption":"Andreas Friedel"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/afriedel\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/20964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=20964"}],"version-history":[{"count":0,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/20964\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/11954"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=20964"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=20964"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=20964"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=20964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}