Нужно ли менять форму отправки PHP и код MySQL insterter при установке SSL-сертификата на сервер? - PullRequest
0 голосов
/ 23 октября 2018

Надеюсь, у вас все хорошо сегодня.

У меня есть вопрос, на который я не смог найти однозначного ответа.Большинство ресурсов заставляют меня поверить, что вопрос спорный, и мне не о чем беспокоиться, но я, к сожалению, не уверен.

У меня простой сайт, ничего сложного.На этом сайте есть форма, где пользователи могут отправлять данные, сохраненные в базу данных MySQL , используя простые функции PHP .Данные отправляются POST , очищаются, а затем отправляются в базу данных localhost для вставки в таблицу с помощью mysqli () и подготовленных операторов.

Теперь к сути.Теперь все работает отлично, но данные могут быть приватными, поэтому я хочу использовать SSL-сертификат (хостинг-провайдер также продает сертификаты, поэтому сама установка выполняется одним щелчком мыши)

Вопрос:Мне нужно изменить свой код для совместимости с SSL?

Я никогда не делал этого раньше, поэтому есть ли в моем простом случае какие-либо вещи, которые я должен рассмотреть и узнать?

Я знаючто сама функция вставки, вероятно, не нуждается в каких-либо модификациях, потому что она подключается к базе данных, которая находится на том же хосте, что и серверная часть, но форма POST все-таки приходит от внешнего пользователя, так что я должен беспокоиться об этом?

И более широкий вопрос: в случае простого сайта, такого как мой (только некоторые обычные HTML, CSS, PHP, как показано, некоторые ванильные JS и jQuery для стилевого оформления, а также для Google Analytics и Tag Manager)Что еще я должен учитывать при переходе на SSL, помимо перенастройки htaccess, чтобы заставить зрителей использовать HTTPS ичтобы убедиться, что нет смешанного контента?

Все, что я прочитал, наводит меня на мысль, что как только хостинг-провайдеры установят сертификат, я смогу набрать https://example.com и все, все должно работать нормально.

Это правда?

Извините, если вопрос неубедительный, но я не смог найти однозначного ответа - иногда я ничего не понимаю.Спасибо за любой ответ заранее.

Вот мой код, на всякий случай.

Index.php и форма:

<?php

// Nonce (not mentioned in the question, but I didn't want to omit it for clarity)
$timestamp = time();
$form_action = 'submit_form';
$nonce = create_nonce($form_action, $timestamp);

// Pushing data 
if(isset($_POST['form1'])){
    if ( ! empty( $_POST ) ) { 
        $insert = process_data($_POST);
    }
}

?>

// The Form

<form action="" method="post">

// Nonce fields, ignore
    <input type="hidden" name="timestamp" value="<?php echo $timestamp; ?>">
    <input type="hidden" name="form_action" value="<?php echo $form_action; ?>">
    <input type="hidden" name="nonce" value="<?php echo $nonce; ?>">

// Here is the rest of the form
    <input type="text" name="stuff1" required>
    <input type="text" name="stuff2" required>
    <input type="text" name="stuff3" required>
    <input type="text" name="stuff4" required>
    <input type="text" name="stuff5" required>
    <button type="submit" name="form1">SEND STUFF</button>
</form>

Сами функции:

// NONCE - Creating the nonce
if ( ! function_exists( 'create_nonce' ) ) {
    function create_nonce($action, $time) {
        $str = sprintf('%s_%s_%s', $action, $time, NONCE_SALT1);
        $nonce = hash('sha512', $str);

        return $nonce;
    }
}

// NONCE - Verification
if ( ! function_exists( 'verify_nonce' ) ) {
    function verify_nonce($nonce, $action, $time) {
        $check = create_nonce($action, $time);

        if ( $nonce == $check ) {
            return true;
        }

        return false;
    }
}


// Now the important bit: the function processing data from the form
if ( ! function_exists( 'process_data' ) ) {
    function process_data($post) {
        // Check nonce
        $verify = verify_nonce($post['nonce'], $post['form_action'], $post['timestamp']);

        if ( false === $verify ) {
            return false;
        }

        // Sanitization
        $args = array(
            'stuff1' => 'FILTER_SANITIZE_STRING',
            'stuff2' => 'FILTER_SANITIZE_STRING',
            'stuff3' => 'FILTER_SANITIZE_STRING',
            'stuff4' => 'FILTER_SANITIZE_STRING',
            'stuff5' => 'FILTER_SANITIZE_STRING',
        );

        $filter_post = filter_var_array($post, $args);


        // Insert into the database
        $mysql = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

        $stmt = $mysql->prepare("
            INSERT INTO mydatatable (stuff1,stuff2,stuff3,stuff4,stuff5) 
            VALUES(?,?,?,?,?)
        ");

        $stmt->bind_param("sssss", 
            $filter_post['stuff1'], $filter_post['stuff2'], $filter_post['stuff3'], $filter_post['stuff4'], $filter_post['stuff5']
        );

        $insert = $stmt->execute();

        // Closing connections

        $stmt->close();
        $mysql->close();

        return $insert;
    }
}

1 Ответ

0 голосов
/ 23 октября 2018

После установки сертификата SSL ваш веб-сайт должен обрабатывать данные, используя URL-адрес с HTTPS.Я предлагаю, чтобы метод формы был действительно постным из-за предложенного использования SSL, поскольку атрибут enctype="multipart/form-data" не будет иметь большого значения, когда страница уже загружена с использованием HTTPS.

При отправке данных из открытогостраница с HTTPS от браузера (на стороне клиента) до URL (включенного в атрибут действия), являющегося PHP, как вы сделали, браузер отправит зашифрованную информацию на хост-сервер.В свою очередь PHP получит эти чистые данные для манипуляции.Что касается безопасности данных на уровне сервера, я считаю, что этого достаточно, чтобы рассмотреть параметризацию URL-адреса, и его можно включить в файл htaccess, как в случае с URL-адресами с www и без www, оба HTTPSURL должны работать, в том числе возвращать код 404 (если не найден) или 301 (перенаправление), см. Дополнительную информацию в https://www.htaccessredirect.net/index.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...