Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 04-29-2008, 06:11 AM
Scuzzy Scuzzy is offline
 
Join Date: Feb 2007
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Why doesn't the GPC resolve "do" anymore for HTML form links in 3.7?

I tried asking this question in the 3.7 troubleshooting section and was shot down for asking a programming question. Is this a bug or is this a new design feature for 3.7?

We use "do" in links in HTML forms on our site. This used to be able to be pulled via the GPC class in 3.6.8 and prior, in 3.7 it does not work:

Sample HTML:
Code:
<?php
/*======================================================================*\
|| #################################################################### ||
|| #################################################################### ||
\*======================================================================*/
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'testsubmit');
// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array('fronthelp');
// get special data templates from the datastore
$specialtemplates = array();
// pre-cache templates used by all actions
$globaltemplates = array(
 'test_template'
);
// pre-cache templates used by specific actions
$actiontemplates = array();
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
 
$vbulletin->input->clean_array_gpc('r', array(
 'do' => TYPE_NOHTML,
 'myaction' => TYPE_NOHTML
));
$ot_do=$vbulletin->GPC['do'];
$ot_myaction = $vbulletin->GPC['myaction'];
echo "Do: $ot_do<br>";
echo "Request Do: " . $_REQUEST['do'] . "<br>";
echo "MyAction: $ot_myaction";
eval('print_output("' . fetch_template('test_template') . '");');
?>
Sample Template:
Code:
<form action="testsubmit.php?myaction=myactionval&do=testdoval" method="post">
   <input maxlength=255 name=mytextval size=60>
   <input type="submit" class="button" name="sbutton" value="Send"/>
</form>
Reply With Quote
  #2  
Old 04-29-2008, 06:39 AM
Guest190829
Guest
 
Posts: n/a
Default

What release candidate are you running?

Also, what is the output of your echo statements? This could possible be the result of the CSRF protocol...
Reply With Quote
  #3  
Old 04-29-2008, 06:53 AM
Scuzzy Scuzzy is offline
 
Join Date: Feb 2007
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I'm running release candidate 4.

If I submit the form by clicking the button I get (click on picture to make them readable):



If I copy the link from the above submitted form into another IE window and just hit "go" I get:



That's why it appears to be just the "do" variable and only if that variable is passed via an html form.

Scuzzy
Reply With Quote
  #4  
Old 04-29-2008, 07:27 AM
Guest190829
Guest
 
Posts: n/a
Default

Add this to the debug:

var_dump($vbulletin->GPC);
Reply With Quote
  #5  
Old 04-29-2008, 08:00 AM
Scuzzy Scuzzy is offline
 
Join Date: Feb 2007
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Submitted:



Cutting and pasting link into another window and hitting "go":



"do" doesn't appear in the array in the submitted form, but "myaction" does...

Scuzzy

--------------- Added [DATE]1209461230[/DATE] at [TIME]1209461230[/TIME] ---------------

I attempted to add the CSRF protection to this form to see if that was the problem.

New code:
Code:
<?php
/*======================================================================*\
|| #################################################################### ||
|| #################################################################### ||
\*======================================================================*/

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'testsubmit');
define('CSRF_PROTECTION', true);  

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array('fronthelp');

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array(
	'test_template'

);

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');


$vbulletin->input->clean_array_gpc('r', array(
	'do' => TYPE_NOHTML,
	'myaction' => TYPE_NOHTML
));

$ot_do=$vbulletin->GPC['do'];
$ot_myaction = $vbulletin->GPC['myaction'];

echo "Do: $ot_do<br>";
echo "Request Do: " . $_REQUEST['do'] . "<br>";
echo "MyAction: $ot_myaction";

echo "<br>**** GPC Var Dump ****<br>";
var_dump($vbulletin->GPC);
echo "<br>**********************<br>";

eval('print_output("' . fetch_template('test_template') . '");');

?>

New Template:
Code:
<form action="testsubmit.php?myaction=myactionval&do=testdoval" method="post">
   <input maxlength=255 name=mytextval size=60>
   <input type="submit" class="button" name="sbutton" value="Send"/>
<input type="hidden" name="s" value="$session[sessionhash]" />
<input type="hidden" name="securitytoken" value="$bbuserinfo[securitytoken]" />
</form>
I logged into my forum, then ran this script.

Before submit:


After submit:



Scuzzy
Reply With Quote
  #6  
Old 04-29-2008, 08:56 AM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

PHP Code:
$vbulletin->input->clean_array_gpc('r', array(
    
'do' => TYPE_NOHTML,
    
'myaction' => TYPE_NOHTML
)); 
If you submit it from a form, it is a POST variable, not a REQUEST, so try:
PHP Code:
$vbulletin->input->clean_array_gpc('p', array(
    
'do' => TYPE_NOHTML,
    
'myaction' => TYPE_NOHTML
)); 
Reply With Quote
  #7  
Old 04-29-2008, 09:22 AM
Scuzzy Scuzzy is offline
 
Join Date: Feb 2007
Posts: 14
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Marco van Herwaarden View Post
PHP Code:
$vbulletin->input->clean_array_gpc('r', array(
    
'do' => TYPE_NOHTML,
    
'myaction' => TYPE_NOHTML
)); 
If you submit it from a form, it is a POST variable, not a REQUEST, so try:
PHP Code:
$vbulletin->input->clean_array_gpc('p', array(
    
'do' => TYPE_NOHTML,
    
'myaction' => TYPE_NOHTML
)); 
I didn't do this because it's really being passed as a post variable, because it's part of the link itself. However, I'm willing to try anything. I did try this, and get the same results:

New Code:
Code:
<?php
/*======================================================================*\
|| #################################################################### ||
|| #################################################################### ||
\*======================================================================*/

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'testsubmit');
define('CSRF_PROTECTION', true);  

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array('fronthelp');

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array(
	'test_template'

);

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');


$vbulletin->input->clean_array_gpc('r', array(
	'do' => TYPE_NOHTML,
	'myaction' => TYPE_NOHTML
));



$ot_do=$vbulletin->GPC['do'];
$ot_myaction = $vbulletin->GPC['myaction'];


$vbulletin->input->clean_array_gpc('p', array(
	'do' => TYPE_NOHTML,
	'myaction' => TYPE_NOHTML
));


$ot_do2=$vbulletin->GPC['do'];
$ot_myaction2 = $vbulletin->GPC['myaction'];


echo "Do From R: $ot_do<br>";
echo "MyAction From R: $ot_myaction<br>";
echo "Do From P: $ot_do2<br>";
echo "MyAction From P: $ot_myaction2<br>";

echo "Request Do: " . $_REQUEST['do'] . "<br>";

echo "<br>**** GPC Var Dump ****<br>";
var_dump($vbulletin->GPC);
echo "<br>**********************<br>";

eval('print_output("' . fetch_template('test_template') . '");');

?>
Before submit:


After submit:


What seems really odd to me is that myaction shows up as a post variable.
Reply With Quote
  #8  
Old 04-29-2008, 10:03 AM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I have discussed this issue with our developers and it seems that this might be due to a change made during the latest CSRF patch. We are now discussing how to prevent side effects like this.

Advice for now is to submit it as a hidden input variable and also send the sessionhash and securitytoken.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 05:33 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.03990 seconds
  • Memory Usage 2,251KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (5)bbcode_code
  • (4)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (8)post_thanks_box
  • (8)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (8)post_thanks_postbit_info
  • (8)postbit
  • (6)postbit_onlinestatus
  • (8)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete