Nút js mysql chuỗi thoát thực

Tôi có một biểu mẫu đăng việc làm ngay bây giờ bất cứ khi nào người dùng nhập dữ liệu và tôi sử dụng chuỗi thoát thực mysql nó chèn dữ liệu trống vào mysql lý do có thể là gì? . vấn đề là tôi không thể tin tưởng vào đầu vào của người dùng, đó là lý do tại sao tôi muốn sử dụng chuỗi mysql_real_escape. tôi đã thử và thay đổi mã từ 2 giờ nhưng không mã nào cho tôi kết quả tốt

     function test_input($data) {


$data = trim($data);
   $data = stripslashes($data);
  $data = mysql_real_escape_string($data);
  return $data;
} 
    $userid1 = $_SESSION['username2'];
    $email= test_input($_POST['email']);
     $salary= test_input($_POST['salary']);
    $job_title = test_input($_POST['jtitle']);
     $company = test_input($_POST['company']);
     $company = mysql_real_escape_string($_POST['company']);
    $location = test_input($_POST['location']);
    $jobtype = test_input($_POST['jobtype']);
     $description = test_input($_POST['description']);
    $closingdate = test_input($_POST['closingdate']);
    $application = test_input($_POST['application']);
    $phone = test_input($_POST['phone']);
    $company_description = test_input($_POST['company_description']);

     $co_video = test_input($_POST['co_video']);
    $website = test_input($_POST['website']);
    $fbid = test_input($_POST['fbid']);
     $twid = test_input($_POST['twid']);

function create_slug($string){     
        $replace = '-';         
        $string = strtolower($string);     

        //replace / and . with white space     
        $string = preg_replace("/[\/\.]/", " ", $string);     
        $string = preg_replace("/[^a-z0-9_\s-]/", "", $string);     

        //remove multiple dashes or whitespaces     
        $string = preg_replace("/[\s-]+/", " ", $string);     

        //convert whitespaces and underscore to $replace     
        $string = preg_replace("/[\s_]/", $replace, $string);     

        //limit the slug size     
        $string = substr($string, 0, 100);     

        //slug is generated     
        return $string; 
    }     

    $string = $job_title; 
    $slug = create_slug($string);
$query = mysqli_query($con, "SELECT * FROM `job` WHERE `url` LIKE '".$slug."%'");      
$exists = mysqli_fetch_array(mysqli_query($con,"SELECT count(id) as notify FROM `job` where `url` LIKE '".$slug."%'")); 
    $notify = $exists['notify'];
    if ($notify > 0)
{
    $new_number = $notify + 1;
    $newslug = $slug."-".$new_number;
$run = mysqli_query($con, "INSERT INTO `job` (`email`, `salary`, `username`, `job_title`, `company_name`, `location`, `job_type`, `description`, `phone`, `closing_date`, `application_url`, `company_description`, `video`, `website`, `fb`, `tw`, `category`, `url`) VALUES ('".$email."', '".$salary."',  '".$userid1."', '".$job_title."', '".$company."', '".$location."', '".$jobtype."', '".$description."', '".$phone."', '".$closingdate."', '".$application."', '".$company_description."', '".$co_video."', '".$website."', '".$fbid."', '".$twid."', '".$lt."' , '".$newslug."')");
} else{ 
$run = mysqli_query($con, "INSERT INTO `job` (`email`, `salary`, `username`, `job_title`, `company_name`, `location`, `job_type`, `description`, `phone`, `closing_date`, `application_url`, `company_description`, `video`, `website`, `fb`, `tw`, `category`, `url`) VALUES ('".$email."', '".$salary."',  '".$userid1."', '".$job_title."', '".$company."', '".$location."', '".$jobtype."', '".$description."', '".$phone."', '".$closingdate."', '".$application."', '".$company_description."', '".$co_video."', '".$website."', '".$fbid."', '".$twid."', '".$lt."', '".$slug."')"); 

ngăn xếp chồng lên nhau. com

var SqlString = require('sqlstring');
1

var SqlString = require('sqlstring');
2

var SqlString = require('sqlstring');
3

var SqlString = require('sqlstring');
4

Thận trọng Các phương pháp thoát giá trị này chỉ hoạt động khi chế độ SQL NO_BACKSLASH_ESCAPES bị tắt (là trạng thái mặc định cho máy chủ MySQL)

Thận trọng Thư viện này thực hiện thoát phía máy khách, vì đây là thư viện để tạo chuỗi SQL ở phía máy khách. Cú pháp của các hàm như

var SqlString = require('sqlstring');
5 có thể trông giống như một câu lệnh đã chuẩn bị, nhưng không phải vậy và các quy tắc thoát từ mô-đun này được sử dụng để tạo chuỗi SQL kết quả. Mục đích của việc thoát đầu vào là để tránh các cuộc tấn công SQL Injection. Để hỗ trợ hỗ trợ nâng cao như định dạng
var SqlString = require('sqlstring');
6 và
var SqlString = require('sqlstring');
7, mô-đun này sẽ thoát ra dựa trên hình dạng của giá trị được truyền trong JavaScript và chuỗi thoát kết quả có thể nhiều hơn một giá trị. Khi đầu vào của người dùng có cấu trúc được cung cấp dưới dạng giá trị để thoát, cần cẩn thận để xác thực hình dạng của đầu vào để xác thực đầu ra sẽ như mong đợi

Để tránh các cuộc tấn công SQL Injection, bạn phải luôn thoát mọi dữ liệu do người dùng cung cấp trước khi sử dụng nó trong một truy vấn SQL. Bạn có thể làm như vậy bằng cách sử dụng phương pháp

var SqlString = require('sqlstring');
8

var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'

Ngoài ra, bạn có thể sử dụng các ký tự

var SqlString = require('sqlstring');
9 làm trình giữ chỗ cho các giá trị mà bạn muốn thoát như thế này

var userId = 1;
var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
console.log(sql); // SELECT * FROM users WHERE id = 1

Nhiều trình giữ chỗ được ánh xạ tới các giá trị theo thứ tự như đã thông qua. Ví dụ: trong truy vấn sau đây,

var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
0 bằng với
var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
1,
var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
2 bằng với
var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
3,
var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
4 bằng với
var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
5 và
var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
6 sẽ là
var userId = 'some user provided value';
var sql    = 'SELECT * FROM users WHERE id = ' + SqlString.escape(userId);
console.log(sql); // SELECT * FROM users WHERE id = 'some user provided value'
7

var SqlString = require('sqlstring');
6

Điều này trông tương tự như các câu lệnh đã chuẩn bị sẵn trong MySQL, tuy nhiên nó thực sự chỉ sử dụng cùng một phương thức

var SqlString = require('sqlstring');
8 trong nội bộ

Thận trọng Điều này cũng khác với câu lệnh đã chuẩn bị ở chỗ tất cả

var SqlString = require('sqlstring');
9 đều được thay thế, kể cả những câu có trong chú thích và chuỗi

Các loại giá trị khác nhau được thoát khác nhau, đây là cách

  • Những con số không bị ảnh hưởng
  • Booleans được chuyển thành ________ 70 / ________ 71
  • Các đối tượng ngày được chuyển đổi thành chuỗi
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    2
  • Bộ đệm được chuyển đổi thành chuỗi hex, e. g.
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    3
  • Chuỗi được thoát an toàn
  • Mảng được biến thành danh sách, e. g.
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    4 biến thành
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    5
  • Các mảng lồng nhau được chuyển thành các danh sách được nhóm (đối với các phần chèn hàng loạt), e. g.
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    6 biến thành
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    7
  • Các đối tượng có phương thức
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    8 sẽ được gọi là
    var userId = 1;
    var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
    console.log(sql); // SELECT * FROM users WHERE id = 1
    9 và giá trị trả về được sử dụng làm SQL thô
  • Các đối tượng được chuyển thành các cặp
    var SqlString = require('sqlstring');
    60 cho mỗi thuộc tính có thể đếm được trên đối tượng. Nếu giá trị của thuộc tính là một hàm, nó sẽ bị bỏ qua;
  • var SqlString = require('sqlstring');
    61 /
    var SqlString = require('sqlstring');
    62 được chuyển đổi thành
    var SqlString = require('sqlstring');
    63
  • var SqlString = require('sqlstring');
    64 /
    var SqlString = require('sqlstring');
    65 được giữ nguyên. MySQL không hỗ trợ những thứ này và việc cố gắng chèn chúng dưới dạng giá trị sẽ gây ra lỗi MySQL cho đến khi chúng triển khai hỗ trợ

Bạn có thể nhận thấy rằng việc thoát này cho phép bạn làm những việc gọn gàng như thế này

var SqlString = require('sqlstring');
5

Và phương pháp

var userId = 1;
var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
console.log(sql); // SELECT * FROM users WHERE id = 1
8 cho phép bạn tạo các truy vấn phức tạp với các hàm

var SqlString = require('sqlstring');
7

Để tạo các đối tượng bằng phương thức

var userId = 1;
var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
console.log(sql); // SELECT * FROM users WHERE id = 1
8, có thể sử dụng phương thức
var SqlString = require('sqlstring');
68. Điều này tạo ra một đối tượng sẽ không được chạm vào khi sử dụng trong trình giữ chỗ
var SqlString = require('sqlstring');
9, hữu ích cho việc sử dụng các hàm làm giá trị động

Thận trọng Chuỗi được cung cấp cho

var SqlString = require('sqlstring');
68 sẽ bỏ qua tất cả các hàm thoát khi được sử dụng, vì vậy hãy cẩn thận khi chuyển đầu vào chưa được xác thực

var SqlString = require('sqlstring');
2

Nếu bạn cảm thấy cần thoát truy vấn một mình, bạn cũng có thể trực tiếp sử dụng chức năng thoát

var SqlString = require('sqlstring');
3

Thoát định danh truy vấn

Nếu bạn không thể tin tưởng một mã định danh SQL (tên cơ sở dữ liệu/bảng/cột) vì nó được cung cấp bởi người dùng, bạn nên thoát nó bằng

var SqlString = require('sqlstring');
51 như thế này

var SqlString = require('sqlstring');
5

Nó cũng hỗ trợ thêm số nhận dạng đủ điều kiện. Nó sẽ thoát khỏi cả hai phần

var SqlString = require('sqlstring');
0

Nếu bạn không muốn coi

var SqlString = require('sqlstring');
52 là số nhận dạng đủ điều kiện, bạn có thể đặt đối số thứ hai thành
var userId = 1;
var sql    = SqlString.format('SELECT * FROM users WHERE id = ?', [userId]);
console.log(sql); // SELECT * FROM users WHERE id = 1
0 để giữ chuỗi dưới dạng số nhận dạng theo nghĩa đen

var SqlString = require('sqlstring');
1

Ngoài ra, bạn có thể sử dụng các ký tự

var SqlString = require('sqlstring');
54 làm trình giữ chỗ cho số nhận dạng mà bạn muốn thoát như thế này

var SqlString = require('sqlstring');
2

Xin lưu ý rằng chuỗi ký tự cuối cùng này là chuỗi ký tự thử nghiệm và cú pháp có thể thay đổi

Khi bạn chuyển một Đối tượng tới

var SqlString = require('sqlstring');
55 hoặc
var SqlString = require('sqlstring');
56, thì
var SqlString = require('sqlstring');
57 được sử dụng để tránh SQL injection trong các khóa đối tượng

Định dạng truy vấn

Bạn có thể sử dụng

var SqlString = require('sqlstring');
5 để chuẩn bị truy vấn có nhiều điểm chèn, sử dụng lối thoát thích hợp cho id và giá trị. Một ví dụ đơn giản về điều này sau đây

var SqlString = require('sqlstring');
3

Sau đó, bạn có một truy vấn thoát, hợp lệ mà sau đó bạn có thể gửi đến cơ sở dữ liệu một cách an toàn. Điều này hữu ích nếu bạn đang tìm cách chuẩn bị truy vấn trước khi thực sự gửi nó đến cơ sở dữ liệu. Bạn cũng có tùy chọn (nhưng không bắt buộc) để chuyển vào

var SqlString = require('sqlstring');
59 và
var SqlString = require('sqlstring');
70, cho phép bạn cung cấp phương tiện tùy chỉnh để biến các đối tượng thành chuỗi, cũng như một
var SqlString = require('sqlstring');
71 theo vị trí/múi giờ cụ thể

Điều này có thể được kết hợp thêm với trình trợ giúp

var SqlString = require('sqlstring');
68 để tạo SQL bao gồm các hàm MySQL dưới dạng giá trị động