Commit:    f286ac42270199cbb331bf0154d2abed3c79a8e4
Author:    Sherif Ramadan <[email protected]>         Fri, 21 Dec 2012 21:18:42 
-0500
Parents:   ef32dfcb634dbb5ee3251456b65fdfe808623dbf
Branches:  master

Link:       
http://git.php.net/?p=web/master.git;a=commitdiff;h=f286ac42270199cbb331bf0154d2abed3c79a8e4

Log:
This fixes the magic_quotes problem my code posed.

I was unaware that fter filter.default should have been set to 'magic_quotes' 
all along. My code was written under the assumption that
'unsafe_raw' was used instead. This patch simply fixes that regression. No 
other code should be affected.

Changed paths:
  M  entry/user-notes-vote.php
  M  manage/user-notes.php

diff --git a/entry/user-notes-vote.php b/entry/user-notes-vote.php
index 75d6d55..8ff49f1 100644
--- a/entry/user-notes-vote.php
+++ b/entry/user-notes-vote.php
@@ -20,6 +20,21 @@
                    { "status": false, "message": "Invalid request..." }
 */
 
+/*
+  - Since filter.default is 'magic_quotes' I'm reverting to filter_input with 
FILTER_UNSAFE_RAW as this was the original
+    assumption underwhich this code was written. The code continues to use 
mysql_real_escape_string as opposed to
+    relying on magic_quotes and the addslashes/strip dependencies were removed 
entirely from this code.
+  - This remains to be portable whether magic_quotes is set as filter.default 
or not.
+  - Please use hscr() as opposed to clean() and real_clean() as opposed to 
escape().
+*/
+foreach($_GET as $key => $val) $_GET[$key] = 
filter_input(INPUT_GET,$key,FILTER_UNSAFE_RAW);
+foreach($_POST as $key => $val) $_POST[$key] = 
filter_input(INPUT_POST,$key,FILTER_UNSAFE_RAW);
+foreach($_COOKIE as $key => $val) $_COOKIE[$key] = 
filter_input(INPUT_COOKIE,$key,FILTER_UNSAFE_RAW);
+foreach($_POST as $key => $val) $_REQUEST[$key] = 
filter_input(INPUT_POST,$key,FILTER_UNSAFE_RAW);
+foreach($_GET as $key => $val) $_REQUEST[$key] = 
filter_input(INPUT_GET,$key,FILTER_UNSAFE_RAW);
+foreach($_SERVER as $key => $val) $_SERVER[$key] = 
filter_input(INPUT_SERVER,$key,FILTER_UNSAFE_RAW);
+
+
 
 // Validate that the request to vote on a user note is OK (ip limits, post 
variables, and db info must pass validation)
 function vote_validate_request(PDO $dbh) {
diff --git a/manage/user-notes.php b/manage/user-notes.php
index c7b8825..f0a1e08 100644
--- a/manage/user-notes.php
+++ b/manage/user-notes.php
@@ -7,6 +7,20 @@ include '../include/email-validation.inc';
 include '../include/note-reasons.inc';
 //require_once 'alert_lib.inc'; // remove comment if alerts are needed
 
+/*
+  - Since filter.default is 'magic_quotes' I'm reverting to filter_input with 
FILTER_UNSAFE_RAW as this was the original
+    assumption underwhich this code was rewritten. The code continues to use 
mysql_real_escape_string as opposed to
+    relying on magic_quotes and the addslashes/strip dependencies were removed 
entirely from this code.
+  - This remains to be portable whether magic_quotes is set as filter.default 
or not.
+  - Please use hscr() as opposed to clean() and real_clean() as opposed to 
escape().
+*/
+foreach($_GET as $key => $val) $_GET[$key] = 
filter_input(INPUT_GET,$key,FILTER_UNSAFE_RAW);
+foreach($_POST as $key => $val) $_POST[$key] = 
filter_input(INPUT_POST,$key,FILTER_UNSAFE_RAW);
+foreach($_COOKIE as $key => $val) $_COOKIE[$key] = 
filter_input(INPUT_COOKIE,$key,FILTER_UNSAFE_RAW);
+foreach($_POST as $key => $val) $_REQUEST[$key] = 
filter_input(INPUT_POST,$key,FILTER_UNSAFE_RAW);
+foreach($_GET as $key => $val) $_REQUEST[$key] = 
filter_input(INPUT_GET,$key,FILTER_UNSAFE_RAW);
+foreach($_SERVER as $key => $val) $_SERVER[$key] = 
filter_input(INPUT_SERVER,$key,FILTER_UNSAFE_RAW);
+
 define("NOTES_MAIL", "[email protected]");
 define("PHP_SELF", hsc($_SERVER['PHP_SELF']));
 
@@ -126,7 +140,7 @@ if (!$action) {
         if (!empty($_GET['votessearch'])) {
           if (($iprange = wildcard_ip($_GET['votessearch'])) !== false) {
             $search = html_entity_decode($_GET['votessearch'], ENT_QUOTES, 
'UTF-8');
-            $start = $iprange[0]; $end = $iprange[1];
+            $start = real_clean($iprange[0]); $end = real_clean($iprange[1]);
             $resultCount = db_query("SELECT count(votes.id) AS total_votes 
FROM votes JOIN (note) ON (votes.note_id = note.id) WHERE ".
                                     "(hostip >= $start AND hostip <= $end) OR 
(ip >= $start AND ip <= $end)");
             $resultCount = mysql_fetch_assoc($resultCount);
@@ -398,7 +412,7 @@ if (!$action) {
 <table>
  <tr>   
   <th align="right">Keyword or ID:</th>
-  <td><input type="text" name="keyword" value="<?php echo 
(isset($_REQUEST['keyword']) ? clean($_REQUEST['keyword']) : ''); ?>" size="10" 
maxlength="32" /></td>
+  <td><input type="text" name="keyword" value="<?php echo 
(isset($_REQUEST['keyword']) ? hscr($_REQUEST['keyword']) : ''); ?>" size="10" 
maxlength="32" /></td>
  </tr>
  <tr> 
   <td align="center" colspan="2">
@@ -443,7 +457,7 @@ case 'mass':
   }
   if (!empty($_REQUEST["ids"])) {
     if (preg_match('~^([0-9]+, *)*[0-9]+$~i', $_REQUEST["ids"])) {
-      $where[] = "id IN ($_REQUEST[ids])";
+      $where[] = "id IN (".real_clean($_REQUEST['ids']).")";
     } else {
       echo "<p><b>Incorrect format of notes IDs.</b></p>\n";
       $step = 0;
@@ -461,16 +475,16 @@ case 'mass':
       } else {
         $step = 2;
         $msg = "Are you sure to change section of <b>$count note(s)</b>";
-        $msg .= (!empty($_REQUEST["ids"]) ? " with IDs <b>" . 
clean($_REQUEST['ids']) . "</b>" : "");
-        $msg .= (!empty($_REQUEST["old_sect"]) ? " from section <b>" . 
clean($_REQUEST['old_sect']) . "</b>" : "");
-        $msg .= " to section <b>" . clean($_REQUEST['new_sect']) . "</b>?";
+        $msg .= (!empty($_REQUEST["ids"]) ? " with IDs <b>" . 
hscr($_REQUEST['ids']) . "</b>" : "");
+        $msg .= (!empty($_REQUEST["old_sect"]) ? " from section <b>" . 
hscr($_REQUEST['old_sect']) . "</b>" : "");
+        $msg .= " to section <b>" . hscr($_REQUEST['new_sect']) . "</b>?";
         echo "<p>$msg</p>\n";
 ?>
 <form action="<?= PHP_SELF; ?>?action=mass" method="post">
 <input type="hidden" name="step" value="2">
-<input type="hidden" name="old_sect" value="<?= clean($_REQUEST["old_sect"]); 
?>">
-<input type="hidden" name="ids" value="<?= clean($_REQUEST["ids"]); ?>">
-<input type="hidden" name="new_sect" value="<?= clean($_REQUEST["new_sect"]); 
?>">
+<input type="hidden" name="old_sect" value="<?= hscr($_REQUEST["old_sect"]); 
?>">
+<input type="hidden" name="ids" value="<?= hscr($_REQUEST["ids"]); ?>">
+<input type="hidden" name="new_sect" value="<?= hscr($_REQUEST["new_sect"]); 
?>">
 <input type="submit" value="Change">
 </form>
 <?php
@@ -492,15 +506,15 @@ case 'mass':
 <table>
  <tr>
   <th align="right">Current section:</th>
-  <td><input type="text" name="old_sect" value="<?= 
clean($_REQUEST["old_sect"]); ?>" size="30" maxlength="80" /> (filename without 
extension)</td>
+  <td><input type="text" name="old_sect" value="<?= 
hscr($_REQUEST["old_sect"]); ?>" size="30" maxlength="80" /> (filename without 
extension)</td>
  </tr>
  <tr>
   <th align="right">Notes IDs:</th>
-  <td><input type="text" name="ids" value="<?= clean($_REQUEST["ids"]); ?>" 
size="30" maxlength="80" /> (comma separated list)</td>
+  <td><input type="text" name="ids" value="<?= hscr($_REQUEST["ids"]); ?>" 
size="30" maxlength="80" /> (comma separated list)</td>
  </tr>
  <tr>
   <th align="right">Move to section:</th>
-  <td><input type="text" name="new_sect" value="<?= 
clean($_REQUEST["new_sect"]); ?>" size="30" maxlength="80" /></td>
+  <td><input type="text" name="new_sect" value="<?= 
hscr($_REQUEST["new_sect"]); ?>" size="30" maxlength="80" /></td>
  </tr>
  <tr> 
   <td align="center" colspan="2">
@@ -522,7 +536,7 @@ case 'approve':
         die ("Note #$id has already been approved");
       }
       
-      if ($row['id'] && db_query("UPDATE note SET status=NULL WHERE id=$id")) {
+      if ($row['id'] && db_query("UPDATE note SET status=NULL WHERE 
id=".real_clean($id))) {
         note_mail_on_action(
             $user,
             $id,
@@ -539,7 +553,7 @@ case 'reject':
 case 'delete':
   if ($id) {
     if ($row = note_get_by_id($id)) {
-      if ($row['id'] && db_query("DELETE note,votes FROM note LEFT JOIN 
(votes) ON (note.id = votes.note_id) WHERE note.id = $id")) {
+      if ($row['id'] && db_query("DELETE note,votes FROM note LEFT JOIN 
(votes) ON (note.id = votes.note_id) WHERE note.id = ".real_clean($id))) {
         // ** alerts **
         //$mailto .= get_emails_for_sect($row["sect"]);
         $action_taken = ($action == "reject" ? "rejected" : "deleted");
@@ -581,7 +595,7 @@ case 'edit':
     $sect = (isset($_POST['sect']) ? 
real_clean(html_entity_decode($_POST['sect'],ENT_QUOTES)) : 
real_clean($row['sect']));
 
     if (isset($note) && $action == "edit") {
-      if (db_query("UPDATE note SET 
note='".real_clean(html_entity_decode($note,ENT_QUOTES))."',user='$email',sect='$sect',updated=NOW()
 WHERE id=$id")) {
+      if (db_query("UPDATE note SET 
note='".real_clean(html_entity_decode($note,ENT_QUOTES))."',user='$email',sect='$sect',updated=NOW()
 WHERE id=".real_clean($id))) {
 
         // ** alerts **
         //$mailto .= get_emails_for_sect($row["sect"]);
@@ -602,9 +616,9 @@ case 'edit':
     $note = isset($note) ? $note : $row['note'];
 
     if ($action == "preview") {
-      echo "<p class=\"notepreview\">",clean_note(strip($note)),
+      echo "<p class=\"notepreview\">",clean_note($note),
            "<br /><span class=\"author\">",date("d-M-Y h:i",$row['ts'])," ",
-           clean(strip($email)),"</span></p>";
+           hscr($email),"</span></p>";
     }
 ?>
 <form method="post" action="<?= PHP_SELF ?>">
@@ -612,14 +626,14 @@ case 'edit':
 <table>
  <tr>
   <th align="right">Section:</th>
-  <td><input type="text" name="sect" value="<?= clean($sect) ?>" size="30" 
maxlength="80" /></td>
+  <td><input type="text" name="sect" value="<?= hscr($sect) ?>" size="30" 
maxlength="80" /></td>
  </tr>
  <tr>
   <th align="right">email:</th>
-  <td><input type="text" name="email" value="<?= clean($email) ?>" size="30" 
maxlength="80" /></td>
+  <td><input type="text" name="email" value="<?= hscr($email) ?>" size="30" 
maxlength="80" /></td>
  </tr>
  <tr>
-  <td colspan="2"><textarea name="note" cols="70" rows="15"><?= clean($note) 
?></textarea></td>
+  <td colspan="2"><textarea name="note" cols="70" rows="15"><?= hscr($note) 
?></textarea></td>
  </tr>
  <tr>
   <td align="center" colspan="2">
@@ -802,7 +816,7 @@ function note_mail_user($mailto, $subject, $message)
 // Return data about a note by its ID
 function note_get_by_id($id)
 {
-    if ($result = db_query("SELECT *, UNIX_TIMESTAMP(ts) AS ts FROM note WHERE 
id='$id'")) {
+    if ($result = db_query("SELECT *, UNIX_TIMESTAMP(ts) AS ts FROM note WHERE 
id='".real_clean($id)."'")) {
         if (!mysql_num_rows($result)) {
             die("Note #$id doesn't exist. It has probably been 
deleted/rejected already.");
         }
-- 
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to