2013-05-13 36 views
2

我是新来的dr​​upal_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', '[email protected]', language_default(), $_POST); 


     $output = "Your result is $display; 

    } 

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

} 

回答

0

如果你想消除$_POST[],你可以发布JSON数据,而不是形成编码数据。

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

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

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

这是“上级”的方式现在发布到PHP,因为POST已经变得有点不安全。老实说,如果你的代码做了适当的输入卫生,你不需要担心$ _POST。如果是drupal和更高版本,我可以向你保证他们已经修补了所有的安全漏洞。 $ _POST []本身并不脆弱,相反,来自它的值的盲目信任是危险的。

+0

感谢您的回复。我不太清楚如何在我的具体情况下实现它 - 我对JSON数据并不熟悉 - 但我会研究这一点。 – 2013-05-14 00:52:17