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