2011-12-30 41 views
6

Tôi cần phải sửa đổi giá trị bằng cách sử dụng javascript, để làm cho nó sẵn sàng để được đưa vào như một phần của truy vấn chèn SQL.Làm cách nào để thay thế dấu gạch chéo ngược bằng dấu gạch chéo ngược kép bằng RegExp?

Hiện tại tôi có mã sau để xử lý ký tự một dấu nháy đơn.

value = value.replace(/'/g, "\\'"); 

Mã này không có vấn đề gì. Bây giờ tôi nhận thấy rằng các dấu gạch chéo ngược độc lập đang gây ra lỗi.

Làm cách nào để xóa những dấu gạch chéo ngược độc lập?

+4

Bạn không bao giờ nên tin tưởng dữ liệu đến từ người dùng theo cách mà nó được sử dụng trực tiếp trong truy vấn.Dữ liệu thoát phải được thực hiện phía máy chủ, nếu không có nguy cơ lớn là bạn sẽ bị tấn công bằng cách sử dụng SQL-injection, vì dễ dàng bỏ qua một JavaScript. –

+2

Tôi rất sợ bởi thực tế là bạn đang tạo các câu lệnh SQL với JavaScript. Bạn có thực sự có một thư viện SQL được viết bằng JavaScript (tôi không nghĩ rằng đã tồn tại), hoặc là bạn gửi các câu lệnh SQL đến máy chủ web để thực hiện ở đó? Nếu nó là thứ hai, _you có một lỗ hổng bảo mật * lớn * _ Bạn _must_ tạo các câu lệnh SQL trên máy chủ. –

+4

Tôi thực sự hy vọng đây là JavaScript phía máy chủ bằng cách nào đó, giống như nodejs. –

Trả lời

16

Bây giờ tôi nhận thấy rằng các dấu gạch chéo ngược độc lập đang gây ra lỗi.

Dấu gạch chéo ngược trong chuỗi bạn đang thao tác sẽ không có tác dụng thay thế ' ký tự nào. Nếu mục tiêu của bạn là để thay thế xuyệc ngược ký tự, sử dụng này:

value = value.replace(/\\/g, "whatever"); 

... mà sẽ thay thế tất cả những dấu xồ nguợc trong chuỗi với "bất cứ điều gì". Lưu ý rằng tôi đã phải viết hai dấu gạch chéo ngược thay vì chỉ một. Đó là vì trong một regular expression literal, dấu gạch chéo ngược được sử dụng để giới thiệu các ký tự đặc biệt và các lớp ký tự khác nhau, và cũng được sử dụng như một lối thoát   — hai dấu chéo ngược cùng nhau trong một cụm từ thông dụng (như trong một chuỗi). .

Để thay đổi một dấu gạch chéo duy nhất vào hai gạch chéo ngược, sử dụng:

value = value.replace(/\\/g, "\\\\"); 

Lưu ý rằng, một lần nữa, để có được một dấu gạch chéo chữ trong chuỗi thay thế, chúng ta phải thoát khỏi mỗi hai   — kết quả trong bốn trong tổng số trong chuỗi thay thế.

Tôi cần phải sửa đổi giá trị bằng cách sử dụng javascript, để làm cho nó sẵn sàng để được đưa vào như một phần của truy vấn chèn SQL.

Bạn không muốn thực hiện việc này bằng tay. Bất kỳ công nghệ nào cho phép bạn thực hiện truy vấn cơ sở dữ liệu và như vậy (JDBC, ODBC, v.v.) sẽ cung cấp một số biểu mẫu được chuẩn bị hoặc thông số (link). Làm điều đó cho mình là hầu như đảm bảo để lại lỗ hổng bảo mật trong phần mềm của bạn mà có thể được khai thác. Bạn muốn sử dụng công việc của một nhóm mà phải suy nghĩ điều này thông qua, và cập nhật mã kết quả theo định kỳ khi các vấn đề đến với ánh sáng, thay vì bay một mình. Hơn nữa, nếu JavaScript của bạn đang chạy trên máy khách (nhiều nhất là, nhưng không có nghĩa là tất cả   — Tôi sử dụng JavaScript phía máy chủ mọi lúc), sau đó không có gì bạn làm để thoát chuỗi có thể làm cho nó an toàn, vì khách hàng yêu cầu đến máy chủ có thể bị giả mạo, hoàn toàn bỏ qua mã phía máy khách của bạn.

+0

Tôi cần phải thay thế bằng dấu gạch chéo ngược đôi. Tôi chỉ có thể sử dụng value = value.replace (/ \\/g, "\\"); ? – user1052933

3

Bạn nên sử dụng chức năng thoát được cung cấp bởi một số loại thư viện cơ sở dữ liệu, việc cuộn của riêng bạn sẽ chỉ gây ra sự cố.

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