Пост безопасности данных в PHP с использованием подготовленного заявления - PullRequest
0 голосов
/ 07 января 2020

Я использую подготовленное заявление для отправки формы, используя ajax. Я попробовал приведенный ниже код, который работает. Мне нужно знать некоторые ценные бумаги. Я проверил на Google и нашел некоторые ответы и сделал код ниже.

Я хочу знать, что мои данные верны? Нужно ли FILTER_SANITIZE_STRING?

Я ввел <h1>naren</h1> и naren's и отправил. Ниже вывод базы данных.

Вывод базы данных

enter image description here

Я получил sla sh (/) и апостроф в последнем ряду .

Процесс. php

function register($conn){
    global $currentdate;
    $name=$conn->real_escape_string(trim($_POST['name']));
    $country=$conn->real_escape_string(trim($_POST['country']));
    $mobileno=$conn->real_escape_string(trim($_POST['mobileno']));
    $email=$conn->real_escape_string(trim($_POST['email']));

    if($name == "") {
        $errorMsg="Name field is required";
        $code="1";
    } else if($country == "") {
        $errorMsg="Country field is required";
        $code="2";
    } elseif ($mobileno=="") {
        $errorMsg="Mobile number is required";
        $code="3";
    } elseif (is_numeric(trim($mobileno))==false) {
        $errorMsg="Only contain a number";
        $code="3";
    } elseif (strlen($mobileno)<10) {
        $errorMsg="Contain minimun 10 number ex:9892555555";
         $code="3";
    } elseif (strlen($mobileno)>10) {
        $errorMsg="Contain maximum 10 number ex:9892555555";
        $code="3";
    } elseif ($email =="") {
        $errorMsg="Email filed is required";
        $code="4";
    } elseif (!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email)) {
        $errorMsg="Please enter valid email id";
        $code="4";
    } else {
        $query="INSERT INTO `register` (name, country, mobileno, email ,date_of_added) VALUES (?,?,?,?,?)";

        if($stmt = $conn->prepare($query)) {
            $stmt->bind_param("sisss", 
                                $name,$country,$mobileno,
                                $email,$currentdate);
            $stmt->execute();
            $errorMsg="Data Inserted";
            $code="5";
            $_SESSION['thankyouSession'] = "true";
        }else{
            $code= "6";
            $errorMsg='Something is wrong';
        }

        $stmt->close();
        $conn->close();
    }
    $response['error']=$errorMsg;
    $response['error_no']=$code;
    echo json_encode($response); 
 }

AJAX

$("#register").validate({
    rules: {
        name:{required:true,minlength:3},
        country:{required:true},
        mobileno:{required:true,minlength:10,maxlength:10,number: true},
        email:{required:true,email: true}
    },

    submitHandler: function (r) {
        $.ajax({
            url: base_url + "/process.php",
            type: "post",
            dataType: 'json',
            data: $('#register').serialize(),
            success: function (response) {
                if (response.error_no == '1') {
                    $('#name').html(response.error);
                } else if (response.error_no == '2') {
                    $('#country').html(response.error);
                } else if (response.error_no == '3') {
                    $('#mobileno').html(response.error);
                } else if (response.error_no == '4') {
                    $('#email').html(response.error);
                } else if (response.error_no == '6') {
                    $('#failed').html(response.error);
                }else{
                    window.location.href=base_url+"/thankyou.php";
                }
            }
        })
      }
    });

Подключение к базе данных

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "database";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
//echo "Connected successfully";
?> 

1 Ответ

0 голосов
/ 07 января 2020

Насколько я знаю, вам не нужна real_escape_string с подготовленными выражениями.

Для VOST-запросов POST, возможно, вам лучше использовать isset, например:

$name = isset($_POST['name']) ? $conn->real_escape_string(trim($_POST['name'])) : '';

Для предотвращения неопределенных ошибок

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

$country= isset($_POST['country']) ? (int)$_POST['country']) : 0;

А затем в проверке elseif, если $ страна> 0

Для проверки электронной почты Вы также можете использовать:

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
// No valid email
}

И, возможно, после точной проверки для затронутых строк, убедитесь, что данные действительно вставлены.

Функция санации может быть необходима для отображения результатов базы данных в вашем html

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