【发布时间】:2020-06-07 07:55:29
【问题描述】:
我的页面中包含一个 POST 函数。我正在尝试为我的 CURL 函数直接调用它,请注意以下代码中的 url 变量设置为 http://dirtrif.loc/installs.php
//extract data from the post
//set POST variables
$cookie_name = "drcuserid";
if(isset($_COOKIE[$cookie_name]))
{
$cookie = $_COOKIE[$cookie_name];
}
$url = 'http://dirtrif.loc/installs.php';
$fields['username'] = $vbulletin->userinfo[username];
$fields['webmasteremail'] = $vbulletin->options[webmasteremail];
$fields['cookie'] = $_COOKIE[$cookie_name];
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
//close connection
curl_close($ch);
echo $fields_string;
当执行 CURL 脚本时,通过导航到实际页面而不运行它应该运行的部分,这会导致问题。
我目前在我的 installs.php 中设置了如下的帖子部分:
if (isset($_POST['username'])) {
$vbulletin->db->query_write("
INSERT INTO " . TABLE_PREFIX . "installs (
username,
webmasteremail,
cookie
) VALUES (" .
$_POST['username'] .", '" .
$_POST['webmasteremail'] . ", '" .
$_POST['cookie'] . "'
)");
}
有没有办法可以更改我的 CURL 代码中的 URL 以直接指向 installs.php 页面的该部分?
installs.php 的完整内容(注意* 自发布此问题以来我做了一些更改)
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'installs');
define('CSRF_PROTECTION', true);
define('CSRF_SKIP_LIST', '');
// ################### PRE-CACHE TEMPLATES AND DATA ######################
// pre-cache templates used by all actions
$globaltemplates = array(
'installs'
);
// pre-cache templates used by specific actions
$actiontemplates = array();
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
// ######################### VARIABLES ############################
$username = $_POST['username'];
$userid = $_POST['userid'];
$email = $_POST['email'];
$addontitle = $_POST['addontitle'];
$addonversion = $_POST['addonversion'];
$bburl = $_POST['bburl'];
$bbtitle = $_POST['bbtitle'];
$webmasteremail = $_POST['webmasteremail'];
$cookie = $_POST['cookie'];
if (isset($_POST['username'])) {
$db->query_write("
INSERT INTO " . TABLE_PREFIX . "installs (
username,userid,email,addontitle,addonversion,bburl,bbtitle,webmasteremail,cookie,dateline
) VALUES (
'$username',
'$userid',
'$email',
'$addontitle',
'$addonversion',
'$bburl',
'$bbtitle',
'$webmasteremail',
'$cookie',
NOW()
)");
}
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
$navbits = array();
$navbits[$parent] = 'Installs Page';
$navbits = construct_navbits($navbits);
eval('$navbar = "' . fetch_template('navbar') . '";');
eval('print_output("' . fetch_template('installs') . '");');
?>
【问题讨论】:
-
上面代码的最后一部分——是来自
installs.php的sn-p吗?上面的代码也只是一个摘录?您能否澄清一下:您想使用 cURL 向installs.php发送 POST 请求,但只执行该页面上的部分代码?如果您要添加所有installs.php,这将有助于确定可以做什么 -
@RamRaider 是的,底部代码来自 installs.php,顶部代码通过可以在任何地方执行的安装脚本调用。 installs.php 内部只是更多的 php/html
-
您的问题有点模糊 - 但您可以在安装脚本中设置可定位的部分 - 例如,在 POST 字段中包含字段
action并在安装中使用switch语句- 如switch($_POST['action']){ case 'install':/* code*/break; case 'uninstall':break; } -
怎么含糊?我想通过url调用我所说的部分,我只是不知道该怎么做,例如:dirtrif.loc/installs.php?post我的网址@RamRaider
-
您的代码容易受到 SQL 注入的影响!