2

我是 drupal_mail 功能的新手,需要帮助。我的代码有效,但我想摆脱 $_POST 参数以限制我的安全漏洞。

我不知道如何在不使用 $_POST 参数的情况下获取发布的变量,理想情况下,我想单独列出每个参数以在其上放置自定义标签。

任何帮助将不胜感激。

    function revenue_calculations() {

    $block = array();
$a = $b = $c = '';
    $errors = array();
    $output = '';
if (isset($_POST)) {

    if (isset($_POST['a'])) $a = (int) round($_POST['a']);
    if (isset($_POST['b'])) $b = (int) round($_POST['b']);
    if (isset($_POST['c'])) $c = (int) round($_POST['c']);

    if (!empty($a) && !empty($b)&& !empty($c)) {

        $calc1 = $a * ($b/100);
        $calc2 = $calc1 * ($c/100);
        $calc3 = $calc2 * .65 * .99;
        $display = '$'.number_format($calc3,2);

////// throw in a drupal_mail send, with the form details  //////
function calculator_mail($key, &$message, $params) {
switch ($key) {
case 'calculation':
  $message['subject'] = t('CALCULATION DONE');
  foreach ($params as $key=>$value) {
    $message['body'][] = $key.': '.check_plain($value);
  }
  break;    
  }
}

drupal_mail('calculator', 'calculation', 'xxx@xxx.com', language_default(), $_POST);


        $output = "Your result is $display;

    }

}
$output .= revenue_calculator();
return $output;

}
4

1 回答 1

0

如果您想消除$_POST[],您可以发布 JSON 数据而不是表单编码数据。

这可以通过多种方式完成,具体取决于您发布数据的方式。我假设 drupal 将表单的结果发送到脚本,但如果您使用 jQuery 和其他 javascript 实现最常用的 JSON 方法发布,您可以将其解码为:

<?php
$foo = file_get_contents("php://input");

$obj = json_decode($foo, true);
$myVar = $obj -> a;

这是当今发布到 PHP 的“优越”方式,因为 POST 已成为一个不安全的出口。

老实说,如果您的代码进行了适当的输入清理,则您不必担心 $_POST。如果它是 drupal 和更高版本,我可以向您保证,他们已经修补了所有安全漏洞。$_POST[] 本身并不容易受到攻击,相反,对来自它的值的盲目信任是危险的。

于 2013-05-13T15:50:21.280 回答