Làm cách nào để sử dụng mysql_real_escape_string()?

nơi tôi sử dụng nó. tôi sử dụng một lớp cơ sở dữ liệu trong các trang web của mình và lớp đó đi qua tất cả đầu vào truy vấn và thoát khỏi nó. theo cách đó, đầu vào không được gửi đến cơ sở dữ liệu sẽ không được thoát, nhưng mọi thứ được thoát khi gửi được gửi đến cơ sở dữ liệu. nó cũng cho phép linh hoạt hơn nhiều khi chuyển giữa các cơ sở dữ liệu. Vì vậy, quy tắc ngón tay cái tôi đề xuất- sử dụng tất cả chức năng mysql với trình bao bọc cơ sở dữ liệu. nó làm cho chúng được sử dụng vào đúng thời điểm và ứng dụng của bạn sẽ không bị lỗi khi bạn chuyển đổi

Hàm mysql_real_escape_string[] thoát các ký tự đặc biệt trong chuỗi để sử dụng trong câu lệnh SQL

Các ký tự sau bị ảnh hưởng

Hàm này trả về chuỗi thoát nếu thành công hoặc FALSE nếu thất bại

cú pháp

mysql_real_escape_string[string,connection]

Tham sốChuỗi mô tảBắt buộc. Chỉ định chuỗi được thoátkết nốiTùy chọn. Chỉ định kết nối MySQL. Nếu không được chỉ định, kết nối cuối cùng được mở bởi mysql_connect[] hoặc mysql_pconnect[] sẽ được sử dụng

Mẹo và Ghi chú

Ghi chú. Sử dụng chức năng này để ngăn chặn tấn công cơ sở dữ liệu

ví dụ 1

    
// some code to get username and password
// escape username and password for use in SQL
$user = mysql_real_escape_string[$user];
$pwd = mysql_real_escape_string[$pwd];

ví dụ 2

tấn công cơ sở dữ liệu. Ví dụ này cho thấy điều gì có thể xảy ra nếu chúng ta không sử dụng hàm mysql_real_escape_string[] trên tên người dùng và mật khẩu

    
$sql = "SELECT * FROM users
WHERE user='{$_POST['user']}'
AND password='{$_POST['pwd']}'";
mysql_query[$sql];
// We didn't check username and password.
// Could be anything the user wanted! Example:
$_POST['user'] = 'john';
$_POST['pwd'] = "' OR ''='";

SQL được gửi sẽ là

    
// some code to get username and password
0

Điều này có nghĩa là bất kỳ ai cũng có thể đăng nhập mà không cần mật khẩu hợp lệ

ví dụ 3

Cách chính xác để làm điều đó để ngăn chặn cuộc tấn công cơ sở dữ liệu

    
// some code to get username and password
1
    
// some code to get username and password
2
Hoàn thành tài liệu tham khảo PHP MySQL

Tìm hiểu cách trang web của bạn hoạt động trong các điều kiện tải khác nhau

WAPT là một công cụ kiểm tra tải, căng thẳng và hiệu suất cho các trang web và ứng dụng dựa trên web. Trái ngược với các công cụ kiểm tra tải "con khỉ đột 800 pound", nó được thiết kế để giảm thiểu thời gian học tập và cung cấp cho bạn khả năng tạo tải nặng từ một máy trạm thông thường. WAPT có thể tạo tới 3000 người dùng ảo hoạt động đồng thời bằng cách sử dụng cấu hình phần cứng tiêu chuẩn. Người dùng ảo trong mỗi hồ sơ hoàn toàn có thể tùy chỉnh. Các phương thức xác thực cơ bản và NTLM được hỗ trợ. Biểu đồ và báo cáo được hiển thị trong thời gian thực ở các mức độ chi tiết khác nhau, do đó giúp quản lý quá trình thử nghiệm

Chà, mysql_real_escape_string không bảo vệ chống lại việc tiêm sql nhiều hơn các dấu gạch chéo bổ sung, nhưng đó không phải là lý do bạn sử dụng nó. addlashes[] là từ các nhà phát triển PHP trong khi mysql_real_escape_string sử dụng API MySQL C++ cơ bản [i. e. từ các nhà phát triển của MySQL]. mysql_real_escape_string thoát ký tự EOF, dấu ngoặc kép, dấu gạch chéo ngược, dấu xuống dòng, giá trị rỗng và nguồn cấp dữ liệu dòng. Ngoài ra còn có khía cạnh bộ ký tự

Tuy nhiên, suy nghĩ chung của rất nhiều lập trình viên PHP [mới bắt đầu và thậm chí là cao cấp hơn] rằng việc tiêm SQL là điều duy nhất cần đề phòng bằng cách làm sạch đầu vào của người dùng bằng cách sử dụng nó trong một truy vấn. Điều đó, thực sự, là không chính xác. Nếu bạn chỉ dựa vào *_escape_string và addlashes vì ​​bạn chỉ nghĩ đến việc tiêm, bạn sẽ dễ bị người dùng tấn công

MySQL có một số mẹo hay cho các lập trình viên PHP trong tài liệu của họ, thật đáng buồn là không tìm thấy ở đâu trong tài liệu của PHP [mà tôi biết, vì tôi đã đọc gần như, nếu không muốn nói là tất cả, và tài liệu mysql của PHP]

http. // nhà phát triển. mysql. com/tech-resources/articles/guide-to-php-security-ch3. pdf. Đó là một bài đọc hay, đặc biệt nếu bạn thích đọc các bài viết về lập trình PHP [có tội]. Cuộn xuống trang 78 nơi họ nói về các cuộc tấn công THÍCH

Nếu bạn không phải là người thích đọc, họ sẽ sử dụng hình minh họa sau đây về thứ mà cả mysql_real_escape_string hoặc addlashes đều không bảo vệ được

$sub = mysql_real_escape_string["%something"]; // still %something
mysql_query["SELECT * FROM messages WHERE subject LIKE '{$sub}%'"];

Và khuyến nghị như sau


$sub = addcslashes[mysql_real_escape_string["%something_"], "%_"];
// $sub == \\%something\\_
mysql_query["SELECT * FROM messages WHERE subject LIKE '{$sub}%'"];

Ngoài ra, hãy đọc phần phía trên phần về THÍCH. Không lối thoát

Hy vọng rằng sẽ giúp một số,
Jonathan

Cảm ơn phản hồi, MrOrange,
một vài suy nghĩ

MrOrange

Tuy nhiên, suy nghĩ chung của rất nhiều lập trình viên PHP [mới bắt đầu và thậm chí là cao cấp hơn] rằng việc tiêm SQL là điều duy nhất cần đề phòng bằng cách làm sạch đầu vào của người dùng bằng cách sử dụng nó trong một truy vấn

Tôi không có ý gợi ý rằng bạn chỉ nên sử dụng các addlash[] hoặc mysql_real_escape_string[] để khử trùng đầu vào. Tôi thực sự quan tâm đến tuyên bố rằng mysql_real_escape_string[] an toàn hơn

MrOrange

addlashes[] là từ các nhà phát triển PHP trong khi mysql_real_escape_string sử dụng API MySQL C++ cơ bản [i. e. từ các nhà phát triển của MySQL]. mysql_real_escape_string thoát ký tự EOF, dấu ngoặc kép, dấu gạch chéo ngược, dấu xuống dòng, giá trị rỗng và nguồn cấp dữ liệu dòng. Ngoài ra còn có khía cạnh bộ ký tự

Vậy làm thế nào để điều đó chuyển thành mysql_real_escape_string[] an toàn hơn là addlashes[] ?

Bất kỳ suy nghĩ?

và cảm ơn vì liên kết–có một số tài liệu rất thú vị trong đó

Tôi đoán tôi đã không nói rõ suy nghĩ của mình trong bài viết gốc của mình

addlashes[] và mysql_real_escape_string[] đều hiệu quả trong việc ngăn chặn hầu hết các lần tiêm SQL – mặc dù, không hoàn toàn hiệu quả vì người ta sẽ phải tính % và _ trong các mệnh đề LIKE là các lần tiêm, mà không chức năng nào bảo vệ chống lại. Cả hai đều bảo vệ ở cùng một mức độ. Chức năng mysql_real_escape_string không còn bảo vệ chống lại việc tiêm SQL nữa so với hàm addlashes[]

Tôi vẫn không hiểu làm cách nào để thoát khỏi các ký tự thừa này giúp truy vấn an toàn hơn

Bạn không sử dụng mysql_real_escape_string để tăng cường bảo mật. Bạn sử dụng nó để thoát các ký tự đặc biệt một cách chính xác. Hình minh họa

$string = "\\$variable has a value of $variable.";

Lý do thì như trên. Bạn không thoát biến đầu tiên vì lý do bảo mật, bạn thoát nó để nó hiển thị và định dạng chính xác

dấu gạch chéo thoát. ', ", \ và NUL
Ngoài ra, mysql_real_escape_string thoát. \x00,
, \r và \x1a

Tại sao nó lại quan trọng nếu các nhà phát triển mysql hoặc php viết một chức năng?

Đó chỉ là một lưu ý thú vị. mysql_real_escape_string được thiết kế bởi những người MySQL với mục đích chèn dữ liệu vào cơ sở dữ liệu. Nó sử dụng chức năng thư viện của MySQL để thoát một số ký tự

Công dụng của hàm mysql_real_escape_string[] là gì?

Định nghĩa và cách sử dụng . escapes special characters in a string for use in an SQL query, taking into account the current character set of the connection.

Làm cách nào để sử dụng mysql_real_escape_string trong PHP 7?

mysql_real_escape_string[] gọi hàm thư viện của MySQL mysql_real_escape_string, hàm này thêm dấu gạch chéo ngược vào các ký tự sau. \x00 , \n , \r , \ , ' , " và \x1a . Chức năng này phải luôn được sử dụng [với một vài ngoại lệ] để đảm bảo an toàn cho dữ liệu trước khi gửi truy vấn tới MySQL.

Khi nào tôi nên sử dụng mysqli_real_escape_string?

Bạn sử dụng mysqli_real_escape_string hoặc bất kỳ biến thể nào của nó để đảm bảo dữ liệu từ bất kỳ trường nhập liệu nào của người dùng được thoát đúng cách . Ví dụ: bạn có một biểu mẫu với một vài đầu vào. Bạn nhấp vào gửi và dữ liệu được gửi dưới dạng yêu cầu tới tập lệnh PHP của bạn. Trong tập lệnh của bạn, bạn chèn vào cơ sở dữ liệu các giá trị mà người dùng đã đăng.

Tại sao mysql_real_escape_string cần kết nối?

mysql_real_escape_string[] và các câu lệnh đã chuẩn bị cần kết nối với cơ sở dữ liệu để chúng có thể thoát khỏi chuỗi bằng cách sử dụng bộ ký tự thích hợp - nếu không thì SQL .

Chủ Đề