2012-12-13 67 views
5

thể trùng lặp:
Using stripslashes after mysql_real_escape_stringDấu gạch ngang là gì?

Tôi đã được đọc gần đây nhất là về công tác phòng chống SQL injection và tôi đang cố gắng để phát triển một số ý nghĩa của sự hiểu biết giữa các chức năng khác nhau để tôi có thể học hỏi những thứ cơ bản.

Tôi đã đọc về mysql_real_escape_string và tôi hiểu rằng về cơ bản là thoát các ký tự mà nó cho là "đặc biệt" sao cho nó không bị nhầm lẫn với cú pháp SQL?

Bây giờ, giả sử rằng ít nhất là ở một mức độ nào đó đúng - có cần sử dụng hàm stripslashes kết hợp với mysql_real_escape_string không? Tôi đang tự hỏi về những gì stripslashes là gì và nó là gì.

+1

Chức năng này được gọi là ['stripslashes'] (http://php.net/manual/fr/function.stripslashes.php). Và có, tính hữu ích của 'mysql_real_escape_string' là" thực ". Và không, bạn không cần phải sử dụng nó với 'mysql_real_escape_string'. – zneak

+1

Vâng, xin lỗi tôi đã viết sai - cảm ơn vì đã chỉ ra. – user1868565

+0

Tôi không thể tìm thấy hàm 'striphashes' trong tài liệu PHP. Bạn có nghĩa là 'stripslashes'? Ngoài ra, 'mysql_real_escape_string' được sử dụng để thoát khỏi bất kỳ thứ gì có khả năng SQL theo cách mà nó không còn là SQL nữa. Kịch bản là: bạn lấy dữ liệu chuỗi từ người dùng; bạn muốn sử dụng dữ liệu này trong một câu lệnh SQL; sử dụng 'mysql_real_escape_string' đảm bảo rằng người dùng không thể chèn SQL vào dữ liệu của họ. AKA, [SQL injection] (https://en.wikipedia.org/wiki/SQL_injection) phòng ngừa. –

Trả lời

11

Nếu bạn sử dụng stripslashes khi nhập ngay sau khi sử dụng mysql_real_escape_string, bạn sẽ hoàn tác tác vụ đó một cách hiệu quả. Có lẽ các lý do khác để sử dụng stripslashes, nhưng trong trường hợp của tôi, tôi chỉ cần nó để hoàn tác sự kinh hoàng đó là dấu ngoặc kép. Nó thực sự là đối diện của addslashes.

addslashes không không nhất thiết là lối vào thoát giống như mysql_real_escape_string và không thể sử dụng cho cùng một mục đích.

Thậm chí tốt hơn mysql_*, bạn nên đọc kỹ các câu đã chuẩn bị như trong PDO. Sau đó, bạn thậm chí không phải lo lắng về mysql_* hoặc stripslashes (ngoại trừ báo giá kỳ diệu).

+0

Cảm ơn tôi nghĩ rằng tôi hiểu nó ngay bây giờ, sẽ chọn làm câu trả lời khi tôi có thể. – user1868565

+0

Bạn không thể tìm hiểu quá nhiều về [thoát SQL thích hợp] (http://bobby-tables.com/php). – tadman

+0

Tôi muốn chỉ ra rằng một số (tất cả?) Triển khai 'mysql_real_escape_string' thoát khỏi dấu ngoặc kép bằng cách tăng gấp đôi chúng:' mysql_real_escape_string ("không") 'trả về hiệu quả' "không", vì vậy sử dụng 'stripslashes 'sẽ không hoàn tác nó. Tuy nhiên, vẫn không hiệu quả khi gọi 'stripslashes' trên đầu ra của' mysql_real_escape_string'; nhưng đừng mong đợi nó sẽ hoàn nguyên chuỗi của bạn về trạng thái ban đầu. – zneak

3

Chức năng stripslashes() sẽ là các ký tự unescape được thoát bằng dấu gạch chéo ngược, \. Nó thường được sử dụng trên các chuỗi được thoát qua addslashes() hoặc nếu cấu hình PHP của bạn đã bật magic_quotes.

Khi sử dụng các hàm thoát SQL chẳng hạn như mysql_real_escape_string(), không cần sử dụng stripslashes() vì bộ điều hợp MySQL sẽ chỉ thoát khỏi các giá trị khi chèn vào cơ sở dữ liệu - các dấu gạch chéo sẽ không còn trong giá trị thực. Nếu bạn đã sử dụng stripslashes() trên một biến mà bạn đã thoát với mysql_real_escape_string(), nó sẽ loại bỏ các dấu gạch chéo như thể nó đã được thoát bằng cách sử dụng addslashes() - khá vô nghĩa mặc dù.

Nếu mục tiêu của bạn là để ngăn chặn SQL-Injection, tôi rất muốn giới thiệu xem xét MySQLi hoặc PDO phản đối phương pháp cũ hơn mysql_. Cả MySQLi và PDO đều cung cấp các câu lệnh chuẩn bị, nếu được sử dụng đúng cách, sẽ ngăn chặn SQL-Injection mà không cần nhớ gọi các hàm thoát đặc biệt hoặc đáng lo ngại nếu dữ liệu của bạn sẽ bị sửa đổi.

-1

stripslashes chức năng được sử dụng cho Un-quotes a quoted string

Ví dụ:

<?php 
echo stripslashes("how\'s going on?"); 
?> 

Sản lượng của các mã trên sẽ là:

how's going on? 

Để biết thêm chi tiết:

http://php.net/manual/en/function.stripslashes.php

+1

Các dấu gạch chéo không hủy bỏ chuỗi trích dẫn. Nghe có vẻ khá sai trong tai tôi. Ngoài ra ví dụ của bạn không được sử dụng nhiều. – hakre

+0

@hakre là công bằng, đây chính xác là cách nó được mô tả trong sách hướng dẫn PHP .... – Martin

+0

@Martin: Bạn đã đúng, trở lại năm 2012 sự hiểu biết của tôi về trích dẫn nhiều khả năng bị hạn chế, tiếng Anh không phải là ngôn ngữ đầu tiên của tôi. – hakre

0

séc ra

http://php.net/manual/en/language.types.string.php
http://php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/mysqli.real-escape-string.php

Các chức năng thoát thêm dấu gạch chéo '\' để thoát khỏi nhân vật có thể được sử dụng để chấm dứt chuỗi truy vấn hợp lệ (không phải là truy vấn chính nó) để ngăn chặn tiêm. chức năng stripslashes được sử dụng để loại bỏ các dấu gạch chéo, tuy nhiên không có sử dụng thực tế cho họ trong việc xây dựng chuỗi truy vấn khi họ loại bỏ các dấu gạch chéo cần thiết.

Kết quả từ MySQL không được 'cắt' (thoát) vì vậy không cần sử dụng stripslashes khi xử lý kết quả.

Các vấn đề liên quan