2013-05-13 65 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