Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   отсутствие default в switch (https://javascript.ru/forum/server/67219-otsutstvie-default-v-switch.html)

DivMan 04.02.2017 01:14

отсутствие default в switch
 
Я сделал калькулятор

<?php error_reporting(-1);
ini_set('display_errors', 'On');
header('Content-Type: text/html; charset=utf-8');
?>  
    
<form action="" method="POST" style="border: 1px solid red; width: 400px; float: left;">
    <div style="width: 300px;">Введите число 1 <input type="text" name="number1"></div>
    <div style="width: 300px;">Введите число 2 <input type="text" name="number2"></div>
    <div class="operator" style="padding: 10px 0;">
        Выберите знак оператора<br>
        <label>плюс <input type="radio" name="op" value="+"></label> |
        <label>минус <input type="radio" name="op" value="-"></label> |
        <label>умножить <input type="radio" name="op" value="*"></label> |
        <label>разделить <input type="radio" name="op" value="/"></label> |
    </div>
    <input type="submit" name="submit" value="Получить результат">
</form>
 
<div class="result" style="width: 200px; height: 100px; border: 1px solid red; float: left;">
<span style="display: block; padding: 10px 0;">Результат</span>
<?php
 
function calc($num1,$num2,$action = '+'){
    if(is_numeric($num1) && is_numeric($num2)){
        switch($action){
            case '+':
                return $num1 . ' + '. $num2 . ' = ' . ($num1 + $num2);
                break;
            case '-':
                return $num1 . ' - '. $num2 . ' = ' . ($num1 - $num2);
                break;
            case '*':
                return $num1 . ' * '. $num2 . ' = ' . ($num1 * $num2);
                break;
            case '/':
                if($num2 == 0){
                    return 'На 0 делить нельзя';
                }
                else{
                    return $num1 . ' / '. $num2 . ' = ' . ($num1 / $num2);
                }
                break;
            }   
        }
    else{
        return 'Введите число';
    }
}
 
if(isset($_POST['number1'], $_POST['number2'])){
    if(isset($_POST['op'])){
        echo calc($_POST['number1'], $_POST['number2'], $_POST['op']);
    }
    else{
        echo calc($_POST['number1'], $_POST['number2']);
    }
    
}
 
?>
</div>


И мне говорят, то, что не указал default из-за этого есть уязвимости для хакеров.

Цитирую:

Допустим я отправлю action="aaa" и произойдет логическая ошибка, так как у тебя отсутствует default. default стоит добавлять, чтобы предусмотреть разное поведение.

Твой вопрос: зачем хакеры подделывают формы? Ну для того, чтобы взламывать сайты. Как раз default бы это исправил


А что можно написать в default, я не знаю.

laimas 04.02.2017 09:16

Цитата:

Сообщение от DivMan
Допустим я отправлю action="aaa" и произойдет логическая ошибка

Это не так. Все зависит от логики приложения, если действия по умолчанию нет, то и страшного не произойдет.
Но если switch определяет переменную, и она по умолчанию не определена, то ее может определить и злоумышленник.

Цитата:

Сообщение от DivMan
зачем хакеры подделывают формы? Ну для того, чтобы взламывать сайты. Как раз default бы это исправил

Ну это полная глупость. Для атаки формы в общем-то и не требуется, достаточно отправить данные под именами полей формы. А способов атак, и мест атаки предостаточно, и default никак не является лекарством от таких атак.

Цитата:

Сообщение от DivMan
А что можно написать в default, я не знаю.

А зачем калькулятор на РНР, какой в нем смысл?

DivMan 04.02.2017 15:34

Делаю калькулятор на php, что бы изучить php.

Я знаю, не надо делать на php, то, что можно сделать на JS, что бы не обращаться лишний раз к серверу.


Часовой пояс GMT +3, время: 08:00.