use deny-by-default security
authorChristian Weiske <cweiske@cweiske.de>
Mon, 17 Sep 2012 21:01:07 +0000 (23:01 +0200)
committerChristian Weiske <cweiske@cweiske.de>
Mon, 17 Sep 2012 21:01:07 +0000 (23:01 +0200)
17 files changed:
data/templates/forbidden.htm
www/delete.php
www/display.php
www/doap.php
www/edit.php
www/forbidden.php [new file with mode: 0644]
www/fork.php
www/index.php
www/list.php
www/login.php
www/new.php
www/raw.php
www/revision.php
www/search.php
www/user.php
www/www-header.php
www/www-security.php [new file with mode: 0644]

index d7d3b61..04b8fb6 100644 (file)
@@ -3,23 +3,13 @@
 
 {% block content %}
 
-<fieldset>
-  <legend>Access Denied</legend>
-  <img src="/images/access_denied.png" align='left'>
-  <p>We're sorry, your identity is not authorized:</p>
-  <p><code>{{ identity }}</code></p>
-  <p>If you feel this message is in error, please notify the site admin
-    and include your identity.</p>
-</fieldset>
+<img src="/images/access_denied.png" align='left' alt="acces denied"/>
+<h2>Access Denied</h2>
+<p>
+ We're sorry; but you are not allowed to access this page.
+</p>
+<p>
+ You may <a href="/login">log in</a> if you want.
+</p>
 {% endblock %}
 
-{% block sidebar %}
- {% if recents.results %}
- <h3>Recently created</h3>
- <ul>
- {% for repo in recents.repos %}
-   {% include 'repo-sidebar-list.htm' %}
- {% endfor %}
- </ul>
- {% endif %}
-{% endblock %}
index 85f6258..6d68ae4 100644 (file)
@@ -4,9 +4,6 @@ namespace phorkie;
  * Delete paste or ask for deletion
  */
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] > 0) {
-    include_once 'secure.php';
-}
 
 $repo = new Repository();
 $repo->loadFromRequest();
index 6f754d9..534a119 100644 (file)
@@ -3,10 +3,8 @@ namespace phorkie;
 /**
  * Display paste contents
  */
+$pageRequiresLogin = false;
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] == 2) {
-    include_once 'secure.php';
-}
 
 $repo = new Repository();
 $repo->loadFromRequest();
index db00df4..f374dba 100644 (file)
@@ -4,6 +4,7 @@ namespace phorkie;
  * Display DOAP of the paste.
  * Contains a machine-readable project description with Git URL.
  */
+$pageRequiresLogin = false;
 require_once 'www-header.php';
 
 $repo = new Repository();
index 20e7793..897aada 100644 (file)
@@ -4,9 +4,6 @@ namespace phorkie;
  * Edit paste contents
  */
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] > 0) {
-    include_once 'secure.php';
-}
 
 $repo = new Repository();
 $repo->loadFromRequest();
diff --git a/www/forbidden.php b/www/forbidden.php
new file mode 100644 (file)
index 0000000..fc166eb
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+namespace phorkie;
+/**
+ * Show an access denied error
+ */
+
+render(
+    'forbidden'
+);
+exit();
+?>
index 64dceb9..3d1c4b7 100644 (file)
@@ -4,9 +4,6 @@
  */
 namespace phorkie;
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] > 0) {
-    include_once 'secure.php';
-}
 
 if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
     throw new Exception_Input('Forking only possible via POST');
index 7ac6fcf..1801831 100644 (file)
@@ -3,6 +3,11 @@
  * Jump to the index as per the configuration
  */
 namespace phorkie;
+$pageRequiresLogin = false;
 require_once 'www-header.php';
-require_once $GLOBALS['phorkie']['cfg']['index'].".php";
+
+header(
+    'Location: '
+    . Tools::fullUrl('/' . $GLOBALS['phorkie']['cfg']['index'])
+);
 ?>
index 5a394eb..721d20c 100644 (file)
@@ -3,10 +3,8 @@
  * List a repository
  */
 namespace phorkie;
+$pageRequiresLogin = false;
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] == 2) {
-    include_once 'secure.php';
-}
 $rs = new Repositories();
 
 $page = 0;
index f05f980..b8cb512 100644 (file)
@@ -18,6 +18,7 @@ set_include_path(
     . PATH_SEPARATOR . get_include_path()
 );
 
+$pageRequiresLogin = false;
 require_once 'www-header.php';
 require_once 'openid/config.php';
 
index 0675b4d..5d370f5 100644 (file)
@@ -10,10 +10,8 @@ namespace phorkie;
  *
  * Creates and redirects to display page
  */
+$pageRequiresLogin = true;
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] > 0) {
-    include_once 'secure.php';
-}
 
 $repopo = new Repository_Post();
 if ($repopo->process($_POST, $_SESSION)) {
index 6b20633..634576d 100644 (file)
@@ -1,12 +1,11 @@
 <?php
+namespace phorkie;
 /**
  * Displays a file
  */
-namespace phorkie;
+$pageRequiresLogin = false;
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] == 2) {
-    include_once 'secure.php';
-}
+
 $repo = new Repository();
 $repo->loadFromRequest();
 
index 06462af..c4ce9e8 100644 (file)
@@ -1,12 +1,10 @@
 <?php
 namespace phorkie;
 /**
- * Display paste contents
+ * Display historic paste contents
  */
+$pageRequiresLogin = false;
 require_once 'www-header.php';
-if ($GLOBALS['phorkie']['auth']['secure'] == 2) {
-    require_once 'secure.php';
-}
 
 $repo = new Repository();
 $repo->loadFromRequest();
index cb72c6a..8701911 100644 (file)
@@ -3,6 +3,7 @@ namespace phorkie;
 /**
  * Search for a search term
  */
+$pageRequiresLogin = false;
 require_once 'www-header.php';
 
 if (!isset($_GET['q']) || $_GET['q'] == '') {
index fd851c4..8f305da 100644 (file)
@@ -4,9 +4,6 @@
  */
 namespace phorkie;
 require_once 'www-header.php';
-if (!isset($_SESSION['identity'])) {
-    include_once 'secure.php';
-}
 
 if (isset($_POST['name'])) {
     $_SESSION['name'] = substr(filter_var($_POST['name'], FILTER_SANITIZE_STRING), 0, 35);
index c840315..290e680 100644 (file)
@@ -72,6 +72,8 @@ $twig = new \Twig_Environment(
 );
 //$twig->addExtension(new \Twig_Extension_Debug());
 
+require __DIR__ . '/www-security.php';
+
 function render($tplname, $vars = array())
 {
     $vars['css'] = $GLOBALS['phorkie']['cfg']['css'];
diff --git a/www/www-security.php b/www/www-security.php
new file mode 100644 (file)
index 0000000..241f866
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+namespace phorkie;
+/**
+ * security levels + login requirement:
+ */
+
+if (!isset($GLOBALS['phorkie']['auth']['secure'])) {
+    //not set? highest level of security
+    $GLOBALS['phorkie']['auth']['secure'] = 2;
+}
+
+if ($GLOBALS['phorkie']['auth']['secure'] == 0) {
+    //everyone may do everything
+    return;
+}
+
+$logged_in = false;
+if (!isset($_SESSION['identity'])) {
+    //not logged in 
+} else if ($GLOBALS['phorkie']['auth']['userlist']) {
+    if (in_array($_SESSION['identity'], $GLOBALS['phorkie']['users'])) {
+        $logged_in = true;
+    }
+} else {
+    //session identity exists, no special checks required
+    $logged_in = true;
+}
+
+if ($logged_in) {
+    //logged in? all fine
+    return;
+} else if ($GLOBALS['phorkie']['auth']['secure'] == 2) {
+    //not logged in and security level 2 => error
+    require 'forbidden.php';
+} else if (isset($pageRequiresLogin) && !$pageRequiresLogin) {
+    return;
+}
+
+require 'forbidden.php';
+?>
\ No newline at end of file