【问题标题】:$_POST['input'] into PHP define string [closed]$_POST['input'] 到 PHP 中定义字符串 [关闭]
【发布时间】:2014-06-12 22:07:59
【问题描述】:

我正在尝试将表单中的$_POST 输入插入到 php 页面中。有什么理由不应该这样做吗?我没有收到任何错误,但也没有得到预期的结果

HTML

<form action="cross-domain-page.php" method="post">
<input type="text" name="phone" value="555555555">
<input type="text" name="fname" value="john">
<input type="text" name="lname" value="doe">
<input type="text" name="email" value="example@address.com">
<input type="text" name="attr" value="<xml>xml-value</xml>">
<input type="submit" name="submit" value="submit">
</form>

PHP

<?php
/*
$phone = $_POST['phone'];
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$attr = $_POST['attr'];
*/
/**
 * Define POST URL and also payload
 */
define('XML_PAYLOAD', '<subscriptions><opt_in>invite</opt_in><user><mobile-phone>' . $_POST['phone'] . '</mobile-phone><first-name>' . $_POST['fname'] . '</first-name><last-name>' . $_POST['lname'] . '</last-name><email>' . $_POST['email'] . '</email>' . $_POST['attr'] . '</user></subscriptions>');
define('XML_POST_URL', $_POST['URL']);

/**
 * Initialize handle and set options
 */
$username = 'username';
$password = 'password';
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_URL, XML_POST_URL);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ; 
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_POSTFIELDS, XML_PAYLOAD);
curl_setopt($ch, CURLOPT_VERBOSE, true);


/**
 * Execute the request and also time the transaction
 */
$start = array_sum(explode(' ', microtime()));
$result = curl_exec($ch);
$stop = array_sum(explode(' ', microtime()));
$totalTime = $stop - $start;

/**
 * Check for errors
 */
if ( curl_errno($ch) ) {
    $result = 'cURL ERROR -> ' . curl_errno($ch) . ': ' . curl_error($ch);
} else {
    $returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
    switch($returnCode){
        case 200:
            break;
        default:
            $result = 'HTTP ERROR -> ' . $returnCode;
            break;
    }
}

/**
 * Close the handle
 */
curl_close($ch);

/**
 * Output the results and time
 */
echo 'Total time for request: ' . $totalTime . "\n";
echo $result;  

/**
 * Exit the script
 */
exit(0);
?>

【问题讨论】:

  • define('XML_POST_URL', $_POST['URL']);
  • 除此之外没有什么问题吗?
  • 我不这么认为。你有错误吗?
  • @JosephCasey:这是一个真正的问题吗?如果是这样,请询问它,因为到目前为止这很难破译。并且还尝试创建一些引发相同问题的不同示例代码。我认为您足够聪明,可以尝试一个与众不同的示例(提示:您重复使用的原始代码确实很糟糕,您有足够的智慧编写自己的代码。当您了解更多时,无需接管其他错误)。
  • 并且不要对变量使用常量。那不是因为它们有好处(即使你只读过一次)

标签: php xml post http-post http-post-vars


【解决方案1】:
  1. 预期的结果是什么?假设常量 XML_PAYLOAD 应该包含带有插入值的 XML...
  2. 什么症状?
  3. 发布您用于发送发布数据的表单的 html 代码也可能会有所帮助。
  4. 此外:嵌入到 XML 文档中时,所有输入都应进行 XML 编码。想想利用读取 XML 文档的组件的潜在漏洞的 XSS 攻击 - 或发送的输入根本不是有效的 XML。

【讨论】:

  • 感谢您告诉我发布代码。它立即帮助我看到我创建的测试表在 (sic) name="phon" 下缺少一个字母。当我要求人们帮助我时,我很讨厌,而且我很粗心,以至于错过了一个错字。明天我将尝试编写一个不受 XSS 攻击的脚本。
  • 即使这是公认的答案,它也不会尝试回答问题。它可能应该是一个评论,因为它是一系列问题,要求提供有关如何改进问题/关于良好实践的建议的更多信息/建议。一切都好,我赶紧补充,但不是答案。
  • 明白了。当时,我不被允许发表评论。责怪系统。
【解决方案2】:

改用这个

 define('XML_POST_URL', $_POST['URL']);

旁注:将用户输入定义为常量是非常糟糕的做法。

【讨论】:

  • $_POST['U​​RL'] 周围的引用是我在传输脚本时出现的拼写错误。 =\
猜你喜欢
  • 2021-05-09
  • 2011-06-09
  • 1970-01-01
  • 2019-08-20
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多