drupal_mail - 需要删除$ _POST

时间:2013-05-13 15:45:23

标签: email drupal params

我是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;

}

1 个答案:

答案 0 :(得分: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 []本身并不容易受到攻击,相反,盲目信任来自它的价值是危险的。