From 64258fa070d17bacc2c173e3b50004dd4529ef7d Mon Sep 17 00:00:00 2001 From: Andreas Grabs Date: Tue, 22 May 2012 09:00:02 +0200 Subject: [PATCH] MDL-27675 - Feedback module abuses data_submitted --- mod/feedback/complete.php | 8 +++----- mod/feedback/complete_guest.php | 12 +++++------- mod/feedback/item/captcha/lib.php | 4 ++++ mod/feedback/item/feedback_item_class.php | 12 ++++++++++-- mod/feedback/item/info/lib.php | 4 ++++ mod/feedback/item/label/lib.php | 3 +++ mod/feedback/item/multichoice/lib.php | 8 ++++++++ mod/feedback/item/multichoicerated/lib.php | 3 +++ mod/feedback/item/numeric/lib.php | 4 ++++ mod/feedback/item/textarea/lib.php | 4 ++++ mod/feedback/item/textfield/lib.php | 4 ++++ mod/feedback/lib.php | 11 +++++++++++ 12 files changed, 63 insertions(+), 14 deletions(-) diff --git a/mod/feedback/complete.php b/mod/feedback/complete.php index 1ccf71ea280..aebb1edd867 100644 --- a/mod/feedback/complete.php +++ b/mod/feedback/complete.php @@ -507,11 +507,8 @@ if ($feedback_can_submit) { //get the value $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; if (isset($savereturn)) { - if (isset($formdata->{$frmvaluename})) { - $value = $formdata->{$frmvaluename}; - } else { - $value = null; - } + $value = isset($formdata->{$frmvaluename}) ? $formdata->{$frmvaluename} : null; + $value = feedback_clean_input_value($feedbackitem, $value); } else { if (isset($feedbackcompletedtmp->id)) { $value = feedback_get_item_value($feedbackcompletedtmp->id, @@ -530,6 +527,7 @@ if ($feedback_can_submit) { feedback_print_item_complete($feedbackitem, $value, $highlightrequired); echo $OUTPUT->box_end(); } + echo $OUTPUT->box_end(); $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) diff --git a/mod/feedback/complete_guest.php b/mod/feedback/complete_guest.php index 25747a99082..b472c09e023 100644 --- a/mod/feedback/complete_guest.php +++ b/mod/feedback/complete_guest.php @@ -72,7 +72,7 @@ if (isset($formdata->sesskey) AND !isset($formdata->gonextpage) AND !isset($formdata->gopreviouspage)) { - $gopage = $formdata->lastpage; + $gopage = (int) $formdata->lastpage; } if (isset($formdata->savevalues)) { $savevalues = true; @@ -441,13 +441,10 @@ if ($feedback_can_submit) { echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle); $value = ''; //get the value - $frmvaluename = $feedbackitem->typ.'_'.$feedbackitem->id; + $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id; if (isset($savereturn)) { - if (isset($formdata->{$frmvaluename})) { - $value = $formdata->{$frmvaluename}; - } else { - $value = null; - } + $value = isset($formdata->{$frmvaluename}) ? $formdata->{$frmvaluename} : null; + $value = feedback_clean_input_value($feedbackitem, $value); } else { if (isset($feedbackcompletedtmp->id)) { $value = feedback_get_item_value($feedbackcompletedtmp->id, @@ -466,6 +463,7 @@ if ($feedback_can_submit) { feedback_print_item_complete($feedbackitem, $value, $highlightrequired); echo $OUTPUT->box_end(); } + echo $OUTPUT->box_end(); $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak) diff --git a/mod/feedback/item/captcha/lib.php b/mod/feedback/item/captcha/lib.php index 126d51e3417..42d4a559b19 100644 --- a/mod/feedback/item/captcha/lib.php +++ b/mod/feedback/item/captcha/lib.php @@ -326,4 +326,8 @@ class feedback_item_captcha extends feedback_item_base { public function can_switch_require() { return false; } + + function clean_input_value($value) { + return clean_param($value, PARAM_RAW); + } } diff --git a/mod/feedback/item/feedback_item_class.php b/mod/feedback/item/feedback_item_class.php index 981aefd58ea..fa4d5754e55 100644 --- a/mod/feedback/item/feedback_item_class.php +++ b/mod/feedback/item/feedback_item_class.php @@ -128,6 +128,14 @@ abstract class feedback_item_base { */ abstract public function print_item_show_value($item, $value = ''); + /** + * cleans the userinput while submitting the form + * + * @param mixed $value + * @return mixed + */ + abstract function clean_input_value($value); + } //a dummy class to realize pagebreaks @@ -175,7 +183,7 @@ class feedback_item_pagebreak extends feedback_item_base { } public function can_switch_require() { } + public function clean_input_value($value) { + } } - - diff --git a/mod/feedback/item/info/lib.php b/mod/feedback/item/info/lib.php index 870c3287bb4..896c5f04521 100644 --- a/mod/feedback/item/info/lib.php +++ b/mod/feedback/item/info/lib.php @@ -388,4 +388,8 @@ class feedback_item_info extends feedback_item_base { public function can_switch_require() { return false; } + + function clean_input_value($value) { + return clean_param($value, PARAM_INT); + } } diff --git a/mod/feedback/item/label/lib.php b/mod/feedback/item/label/lib.php index 25c62a9f55d..934734bf556 100644 --- a/mod/feedback/item/label/lib.php +++ b/mod/feedback/item/label/lib.php @@ -270,4 +270,7 @@ class feedback_item_label extends feedback_item_base { } public function get_analysed($item, $groupid = false, $courseid = false) { } + public function clean_input_value($value) { + return ''; + } } diff --git a/mod/feedback/item/multichoice/lib.php b/mod/feedback/item/multichoice/lib.php index 4c836e0d850..825383edf18 100644 --- a/mod/feedback/item/multichoice/lib.php +++ b/mod/feedback/item/multichoice/lib.php @@ -826,4 +826,12 @@ class feedback_item_multichoice extends feedback_item_base { public function value_is_array() { return true; } + + function can_switch_require() { + return true; + } + + function clean_input_value($value) { + return clean_param_array($value, PARAM_INT); + } } diff --git a/mod/feedback/item/multichoicerated/lib.php b/mod/feedback/item/multichoicerated/lib.php index 050f7ebc050..aab374f8de8 100644 --- a/mod/feedback/item/multichoicerated/lib.php +++ b/mod/feedback/item/multichoicerated/lib.php @@ -678,4 +678,7 @@ class feedback_item_multichoicerated extends feedback_item_base { return true; } + function clean_input_value($value) { + return clean_param($value, PARAM_INT); + } } diff --git a/mod/feedback/item/numeric/lib.php b/mod/feedback/item/numeric/lib.php index ae19cf9fcdb..0e930e9cddc 100644 --- a/mod/feedback/item/numeric/lib.php +++ b/mod/feedback/item/numeric/lib.php @@ -534,4 +534,8 @@ class feedback_item_numeric extends feedback_item_base { public function can_switch_require() { return true; } + + function clean_input_value($value) { + return clean_param($value, PARAM_FLOAT); + } } diff --git a/mod/feedback/item/textarea/lib.php b/mod/feedback/item/textarea/lib.php index e6aaec5529f..ef1456d2095 100644 --- a/mod/feedback/item/textarea/lib.php +++ b/mod/feedback/item/textarea/lib.php @@ -333,4 +333,8 @@ class feedback_item_textarea extends feedback_item_base { public function can_switch_require() { return true; } + + function clean_input_value($value) { + return clean_param($value, PARAM_CLEANHTML); + } } diff --git a/mod/feedback/item/textfield/lib.php b/mod/feedback/item/textfield/lib.php index 083069ed033..04e8ed0e6aa 100644 --- a/mod/feedback/item/textfield/lib.php +++ b/mod/feedback/item/textfield/lib.php @@ -320,4 +320,8 @@ class feedback_item_textfield extends feedback_item_base { public function can_switch_require() { return true; } + + function clean_input_value($value) { + return clean_param($value, PARAM_CLEANHTML); + } } diff --git a/mod/feedback/lib.php b/mod/feedback/lib.php index 19e642575bd..072d7d2478b 100644 --- a/mod/feedback/lib.php +++ b/mod/feedback/lib.php @@ -2064,6 +2064,17 @@ function feedback_get_page_to_continue($feedbackid, $courseid = false, $guestid //functions to handle the values //////////////////////////////////////////////// +/** + * cleans the userinput while submitting the form. + * + * @param mixed $value + * @return mixed + */ +function feedback_clean_input_value($item, $value) { + $itemobj = feedback_get_item_class($item->typ); + return $itemobj->clean_input_value($value); +} + /** * this saves the values of an completed. * if the param $tmp is set true so the values are saved temporary in table feedback_valuetmp.