这是一个安全的PHP实践吗?

时间:2011-04-26 05:03:30

标签: php

我正在尝试制作一个在线计算器,人们可以在我的网站中使用表单进行计算,人们可以在表单中进行POST,结果是通过url字符串获取。这样安全吗?

HTML

<form id="form1">
            <input type="text" name="user_price" size=2/>
            <?php echo form_dropdown('selling', $rates);?>
            <input type="submit" value="submit">
            </form>

PHP

        <?php 
        if((int)$_GET['user_price']){
        echo 'Total '. $_GET['user_price'] * $_GET['selling'];
        }else if((string)$_GET['user_price'] OR (array)$_GET['user_price']){
            echo 'enter number not characters';
        }else{
            echo '';
        }
        ?>

4 个答案:

答案 0 :(得分:3)

是的,这是非常安全的,它没有意义。 (int)$_GET['user_price'] 值转换为整数,表示“如果值为整数”

您正在寻找:

if (isset($_GET['user_price'], $_GET['selling']) &&
    is_numeric($_GET['user_price']) && is_numeric($_GET['selling'])) {
   ...
} else {
   echo 'Please enter numbers';
}

答案 1 :(得分:1)

你可以让它更简洁

if (is_numeric($_GET['user_price']) && is_numeric($_GET['selling'])) {
    echo 'Total '. $_GET['user_price'] * $_GET['selling'];
} else {
    echo 'Something went wrong';
}

答案 2 :(得分:1)

以下是我编写代码的方法......

$userPrice = isset($_GET['user_price']) ? $_GET['user_price']) : NULL;
$selling = isset($_GET['selling']) ? $_GET['selling'] : NULL;

if (is_numeric($userPrice) AND is_numeric($selling)) {
   echo 'Total '. $userPrice * $selling;
} else {
   echo 'enter number not characters';
} 

请注意,如果回复用户提交的字符串,请使用htmlspecialchars()包装好的习惯。

答案 3 :(得分:0)

完全安全,但在使用GET和POST时,您应该在对表单数据执行任何操作之前声明变量