2010-04-12 40 views
6

Chúng tôi cho phép người dùng tìm kiếm cơ sở dữ liệu từ một đầu vào văn bản duy nhất và tôi gặp khó khăn trong việc lọc một số chuỗi do người dùng cung cấp.Xác thực người dùng nhập hoặc

Ví dụ, nếu người dùng gửi:

��������� lcd SONY 

(Lưu ý 's?) Tôi cần phải hủy bỏ việc tìm kiếm.

tôi bao gồm các phiên bản base64 của chuỗi trên quấn lên mã hóa để chạy dễ dàng của nó:

print(base64_decode("1MfLxc/RwdPHIGxjZCBTT05Z")); 

Tôi đã bỏ qua nguyên liệu đầu vào như trước đây nhưng bây giờ (không chắc chắn lý do tại sao) chỉ nhận ra các truy vấn cơ sở dữ liệu mysql đang thực hiện gần như mãi mãi để thực hiện vì vậy điều này hiện đang được ưu tiên cao.

Một ví dụ khác để làm nổi bật mà chúng ta đang sử dụng utf-8 và mb_detect_encoding không được giúp đỡ nhiều:

print(base64_decode("zqDOm8+Fzr3PhM63z4HOuc6/IM+Bzr/Phc+HzyU=")); 
ΠΛυντηριο ρουχ�% 

Vì vậy:

  • làm thế nào tôi có thể phát hiện/lọc các nguyên liệu đầu vào?
  • cách nhập này được tạo ra như thế nào?
+2

Việc từ chối các đầu vào này là điều không đúng. Bạn cần phải tìm ra lý do tại sao chúng ảnh hưởng xấu đến hiệu suất ngay từ đầu. – SLaks

+0

Đây là tuyến phòng thủ đầu tiên. Tôi đang bị kẹt vào lúc này vì vậy tôi sẽ điều tra vấn đề hiệu suất cơ sở dữ liệu ngay bây giờ cho đến khi tôi có một ý tưởng sáng sủa. – zaf

+0

Bạn có nói rằng người dùng thực sự nhập thủ công ký tự thay thế không? http://www.fileformat.info/info/unicode/char/FFFD/index.htm –

Trả lời

1

Bạn không nên nhận rằng, mặc dù nếu bạn thực sự muốn lọc (mà tôi không reccommend), làm một tấm séc cho chữ và số cũng như "- .;", vv

Bạn có thể sử dụng một số chức năng này để giúp bạn trong quá trình lọc.

http://www.php.net/manual/en/function.ctype-alnum.php

+0

Điều đó có xử lý một cái gì đó như "παπουτσια"? Số – zaf

0

Nếu bạn thực hiện các truy vấn sau khi tạo kết nối đến mysql, cần xử lý utf-8 đầu vào và kết quả tốt mà không phun ra 's?.

mysql_query("SET character_set_client=utf8", $mysqlConn); 
mysql_query("SET character_set_connection=utf8", $mysqlConn); 
mysql_query("SET character_set_results=utf8", $mysqlConn); 

(giả định cơ sở dữ liệu được thiết lập để utf-8 và bạn không nhớ không lọc họ nếu họ không biến thành? 'S)

(cũng giả sử bạn đang sử dụng mysql, khác dbms có thể có các chức năng tương tự)

+0

Chúng tôi nhận được đầu vào này từ người dùng trước khi nó chạm vào cơ sở dữ liệu. – zaf

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