2015-05-23 2 views
-1

Является ли этот код подверженным SQL Injection? Можете ли вы предложить что-то для повышения безопасности? Правильно ли использовать mysqli_real_escape_string? И вы думаете, что это хорошо для использования в проекте?Является ли этот код уязвимым для SQL-инъекции?

<?php 
require 'db.php'; 

    if(isset($_POST['pawnshopName'])&&isset($_POST['street'])&&isset($_POST['barangay'])&&isset($_POST['city'])&&isset($_POST['dtiPermitNo'])&&isset($_POST['mayorPermitNo'])&&isset($_POST['firstName'])&&isset($_POST['lastName'])&&isset($_POST['middleName'])&&isset($_POST['contactNumber'])&&isset($_POST['email'])&&isset($_POST['password'])&&isset($_POST['confirmPassword'])) 
{ 
    $options = ['cost' => 11, 'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),]; 
    $pawnshopName = mysqli_real_escape_string($connection, $_POST['pawnshopName']); 
    $street = mysqli_real_escape_string($connection, $_POST['street']); 
    $barangay = mysqli_real_escape_string($connection, $_POST['barangay']); 
    $city = mysqli_real_escape_string($connection, $_POST['city']); 
    $dtiPermitNo = mysqli_real_escape_string($connection, $_POST['dtiPermitNo']); 
    $mayorPermitNo = mysqli_real_escape_string($connection, $_POST['mayorPermitNo']); 
    $firstName = mysqli_real_escape_string($connection, $_POST['firstName']); 
    $lastName = mysqli_real_escape_string($connection, $_POST['lastName']); 
    $middleName = mysqli_real_escape_string($connection, $_POST['middleName']); 
    $contactNumber = mysqli_real_escape_string($connection, $_POST['contactNumber']); 
    $email = mysqli_real_escape_string($connection, $_POST['email']); 
    $password = mysqli_real_escape_string($connection, password_hash($_POST['password'], PASSWORD_BCRYPT, $options)); 
    $confirmPassword = mysqli_real_escape_string($connection, $_POST['confirmPassword']); 
    if(password_verify($confirmPassword,$password)) 
    { 
     echo 'Password Match'; 
    }else 
    { 
     echo 'Password mismatch'; 
    } 
    $sql = "INSERT INTO pawnshop ". 
    "(Pawnshop_ID, Pawnshop_Name, Street, Barangay, City, DTI_Permit_No, Mayor_Permit_No, Firstname, Middlename, Lastname, Contact_Number, Email_Address, Password) ". 
    "VALUES ". 
    "('','".$pawnshopName."', '".$street."', '".$barangay."', '".$city."', '".$dtiPermitNo."', '".$mayorPermitNo."', '".$firstName."', '".$lastName."', '".$middleName."', '".$contactNumber."', '".$email."', '".$password."')"; 

    mysqli_query($connection, $sql); 
    mysqli_close($connection); 

} 
?> 

ответ

2

Нет, вы должны использовать метод prepare. Затем на каждом месте, где вы хотите добавить значение, введите ?. Чем вы должны использовать метод bind_param. Наконец, вы можете выполнить его и получить результаты whit get_results. Пример:

$stmt = $connection->prepare("INSERT INTO Customers (CustomerName, Address, CityID) VALUES (?, ?, ?)"); 
$stmt->bindParam('ssi', $name, $address, $cityId); 
$stmt->execute(); 
$results = $stmt->get_results(); 

'ssi' является соответствующим переменной типы атрибутов.

  • i целые
  • d двойники
  • s являются строки
  • b является блоб и будут отправлены в пакетах

Мои ресурсы являются: w3schools и php.net

+0

Знаете ли вы некоторые ресурсы, где можно изучить предложенный вами метод? знак равно – soyan

Смежные вопросы