]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/Gigi.java
FIX: Content types
[gigi.git] / src / org / cacert / gigi / Gigi.java
index 2a67dd9602305923db63a48c53a53d8a89d3b4ac..9908a1c623e2b4db5068e1be4dd569739520b8eb 100644 (file)
@@ -9,6 +9,7 @@ import java.util.LinkedList;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Properties;
+import java.util.regex.Pattern;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -177,10 +178,18 @@ public class Gigi extends HttpServlet {
     protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
         boolean isSecure = req.getServerPort() == ServerConstants.getSecurePort();
         addXSSHeaders(resp, isSecure);
-        // if (req.getHeader("Origin") != null) {
-        // resp.getWriter().println("No cross domain access allowed.");
-        // return;
-        // }
+        // Firefox only sends this, if it's a cross domain access; safari sends
+        // it always
+        String originHeader = req.getHeader("Origin");
+        if (originHeader != null //
+                &&
+                !(originHeader.matches("^" + Pattern.quote("https://" + ServerConstants.getWwwHostNamePortSecure()) + "(/.*|)") || //
+                        originHeader.matches("^" + Pattern.quote("http://" + ServerConstants.getWwwHostNamePort()) + "(/.*|)") || //
+                originHeader.matches("^" + Pattern.quote("https://" + ServerConstants.getSecureHostNamePort()) + "(/.*|)"))) {
+            resp.setContentType("text/html; charset=utf-8");
+            resp.getWriter().println("<html><head><title>Alert</title></head><body>No cross domain access allowed.<br/><b>If you don't know why you're seeing this you may have been fished! Please change your password immediately!</b></body></html>");
+            return;
+        }
         HttpSession hs = req.getSession();
         if (req.getParameter("lang") != null) {
             Locale l = Language.getLocaleFromString(req.getParameter("lang"));
@@ -206,8 +215,6 @@ public class Gigi extends HttpServlet {
                 return;
             }
             HashMap<String, Object> vars = new HashMap<String, Object>();
-
-            resp.setContentType("text/html; charset=utf-8");
             Outputable content = new Outputable() {
 
                 @Override
@@ -239,6 +246,7 @@ public class Gigi extends HttpServlet {
             vars.put("static", getStaticTemplateVar(isSecure));
             vars.put("year", Calendar.getInstance().get(Calendar.YEAR));
             vars.put("content", content);
+            resp.setContentType("text/html; charset=utf-8");
             baseTemplate.output(resp.getWriter(), Page.getLanguage(req), vars);
         } else {
             resp.sendError(404, "Page not found.");