summaryrefslogtreecommitdiffstats
path: root/web/template
diff options
context:
space:
mode:
authorcanyonknight <canyonknight@gmail.com>2012-06-23 20:40:11 +0200
committerLukas Fleischer <archlinux@cryptocrack.de>2012-06-24 10:59:23 +0200
commit2c93f0a98f0f6380fd07ea17fd16afa2c6e4925b (patch)
treedc5fd78a8cb46cd1475b45eeaa6544fbdeb23280 /web/template
parentbfb25807c49d3f35cdce91947a442455e1940392 (diff)
downloadaur-2c93f0a98f0f6380fd07ea17fd16afa2c6e4925b.tar.gz
aur-2c93f0a98f0f6380fd07ea17fd16afa2c6e4925b.tar.xz
Implement token system to fix CSRF vulnerabilities
Specially crafted pages can force authenticated users to unknowingly perform actions on the AUR website despite being on an attacker's website. This cross-site request forgery (CSRF) vulnerability applies to all POST data on the AUR. Implement a token system using a double submit cookie. Have a hidden form value on every page containing POST forms. Use the newly added check_token() to verify the token sent via POST matches the "AURSID" cookie value. Random nature of the token limits potential for CSRF. Signed-off-by: canyonknight <canyonknight@gmail.com> Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Diffstat (limited to 'web/template')
-rw-r--r--web/template/actions_form.php1
-rw-r--r--web/template/pkg_comment_form.php5
-rw-r--r--web/template/pkg_comments.php1
-rw-r--r--web/template/pkg_details.php3
-rw-r--r--web/template/pkg_search_results.php1
-rw-r--r--web/template/tu_details.php1
6 files changed, 10 insertions, 2 deletions
diff --git a/web/template/actions_form.php b/web/template/actions_form.php
index 68d83d73..fa6ad72f 100644
--- a/web/template/actions_form.php
+++ b/web/template/actions_form.php
@@ -3,6 +3,7 @@
<fieldset>
<input type='hidden' name='IDs[<?php echo $row['ID'] ?>]' value='1' />
<input type='hidden' name='ID' value="<?php echo $row['ID'] ?>" />
+ <input type='hidden' name='token' value="<?php echo htmlspecialchars($_COOKIE['AURSID']) ?>" />
<?php
# Voting Button
#
diff --git a/web/template/pkg_comment_form.php b/web/template/pkg_comment_form.php
index d3b602cd..60816436 100644
--- a/web/template/pkg_comment_form.php
+++ b/web/template/pkg_comment_form.php
@@ -1,6 +1,6 @@
<?php
# Add a comment to this package
-if (isset($_REQUEST['comment'])) {
+if (isset($_REQUEST['comment']) && check_token()) {
# Insert the comment
$dbh = db_connect();
@@ -53,13 +53,14 @@ if (isset($_REQUEST['comment'])) {
<form action='<?php echo $_SERVER['REQUEST_URI'] ?>' method='post'>
<div style="padding: 1%">
<?php
-if (isset($_REQUEST['comment'])) {
+if (isset($_REQUEST['comment']) && check_token()) {
echo '<b>' . __('Comment has been added.') . '</b>';
}
?>
<input type='hidden' name='ID' value="<?php echo intval($_REQUEST['ID']) ?>" />
<?php echo __('Enter your comment below.') ?><br />
<textarea name='comment' cols='80' rows='10' style="width: 100%"></textarea><br />
+ <input type='hidden' name='token' value='<?php echo htmlspecialchars($_COOKIE['AURSID']) ?>' />
<input type='submit' value="<?php echo __("Submit") ?>" />
<input type='reset' value="<?php echo __("Reset") ?>" />
</div>
diff --git a/web/template/pkg_comments.php b/web/template/pkg_comments.php
index aed9ca8b..9dd50041 100644
--- a/web/template/pkg_comments.php
+++ b/web/template/pkg_comments.php
@@ -15,6 +15,7 @@ while (list($indx, $carr) = each($comments)) { ?>
$durl.= '<fieldset style="display:inline;">';
$durl.= '<input type="hidden" name="action" value="do_DeleteComment" />';
$durl.= '<input type="hidden" name="comment_id" value="'.$carr['ID'].'" />';
+ $durl.= '<input type="hidden" name="token" value="'.htmlspecialchars($_COOKIE['AURSID']).'" />';
$durl.= '<input type="image" src="images/x.png" ';
$durl.= ' alt="'.__("Delete comment").'" name="submit" value="1" ';
$durl.= ' />&nbsp;';
diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php
index 046f836b..193af848 100644
--- a/web/template/pkg_details.php
+++ b/web/template/pkg_details.php
@@ -10,6 +10,9 @@ if ($uid == $row["MaintainerUID"] or
$edit_cat = "<form method='post' action='packages.php?ID=".$pkgid."'>\n";
$edit_cat.= "<p>";
$edit_cat.= "<input type='hidden' name='action' value='do_ChangeCategory' />";
+ if ($SID) {
+ $edit_cat.= "<input type='hidden' name='token' value='".htmlspecialchars($_COOKIE['AURSID'])."' />";
+ }
$edit_cat.= "<span class='f3'>" . __("Category") . ":</span> ";
$edit_cat.= "<select name='category_id'>\n";
foreach ($catarr as $cid => $catname) {
diff --git a/web/template/pkg_search_results.php b/web/template/pkg_search_results.php
index e576e6e3..609dc191 100644
--- a/web/template/pkg_search_results.php
+++ b/web/template/pkg_search_results.php
@@ -114,6 +114,7 @@ for ($i = 0; $row = mysql_fetch_assoc($result); $i++) {
<input type='text' id='merge_Into' name='merge_Into' />
<input type='checkbox' name='confirm_Delete' value='1' /> <?php print __("Confirm") ?>
<?php endif; ?>
+ <input type='hidden' name='token' value='<?php print htmlspecialchars($_COOKIE['AURSID']) ?>' />
<input type='submit' class='button' style='width: 80px' value='<?php print __("Go") ?>' />
</div>
<?php endif; # if ($SID) ?>
diff --git a/web/template/tu_details.php b/web/template/tu_details.php
index 7d6c305d..dde53a8c 100644
--- a/web/template/tu_details.php
+++ b/web/template/tu_details.php
@@ -70,6 +70,7 @@ if (!$isrunning) { ?>
<input type='submit' class='button' name='voteNo' value='<?php print __("No") ?>' />
<input type='submit' class='button' name='voteAbstain' value='<?php print __("Abstain") ?>' />
<input type='hidden' name='doVote' value='1' />
+<input type='hidden' name='token' value='<?php print htmlspecialchars($_COOKIE['AURSID']) ?>' />
</fieldset>
</form>
<?php } else { ?>