我正在尝试制作一个在线计算器,人们可以在我的网站中使用表单进行计算,人们可以在表单中进行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 '';
}
?>
答案 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时,您应该在对表单数据执行任何操作之前声明变量