2008-11-12 29 views
9

Tôi đang cố xử lý giao dịch thẻ tín dụng bằng .net và nó hoạt động hoàn hảo trong Safari, Opera và IE. Khi tôi thử cùng một giao dịch trong Firefox nó sẽ gửi hai yêu cầu và tôi kết thúc với một thẻ tính phí gấp đôi. Từ một tìm kiếm nhanh trên Google có vẻ như đây là vấn đề với Firebug nhưng tôi không thể tìm ra cách để ngăn chặn bài đăng kép này.Yêu cầu gửi Firefox hai lần

Có ai có bất kỳ ý tưởng nào về cách ngăn chặn Firefox (và Firebug) thực hiện việc này không?

+0

Trang web sử dụng hình thức xác thực nào? –

Trả lời

8

Sử dụng nonce, khóa duy nhất chỉ được sử dụng một lần.

Gửi một số duy nhất cùng với các trường biểu mẫu tới trình duyệt (điều này thường được thực hiện với trường nhập ẩn) và lưu bản sao trên máy chủ bằng giao dịch. Trong biểu mẫu, thay đổi số khi gửi. Xác thực rằng các phím khớp với khi xử lý yêu cầu của bạn.

Cũng có thể có giải thích rõ ràng về những gì đang xảy ra ở giao diện người dùng và vấn đề đó có thể bị loại bỏ phía máy khách. Tốt nhất là giải quyết vấn đề hai lần gửi trên máy chủ, đơn giản bởi vì có quá nhiều cách để có thể gửi hai lần.

+0

Điều này nghe có vẻ như nó có thể làm các trick. Tôi sẽ thử nó vào ngày mai và cho bạn biết làm thế nào nó đi. Cảm ơn! –

+0

@Chris Philpotts - Bạn có may mắn với giải pháp này không? Chúng tôi đang gặp sự cố tương tự trong ứng dụng của chúng tôi xử lý thanh toán bằng thẻ tín dụng. –

0

Tôi đã gặp phải vấn đề tương tự - không nhận ra nó là đặc trưng cho FireBug. Bạn thực sự nên khắc phục điều này đúng cách, trong trường hợp người dùng nhấp vào nút quay lại và gửi lại.

Cách thông thường là có mã thông báo duy nhất cho giao dịch trong trường ẩn trong biểu mẫu. Khi phía máy chủ nhận được biểu mẫu, nó ngăn cản một giao dịch khác được thực hiện.

2

tôi sử dụng Firebug 1.2.1 và nó đã có một phòng cho bài gấp đôi so với lỗi, nó cho bạn thấy cảnh báo này khi bạn muốn xem phản ứng AJAX:

Firebug cần phải POST đến máy chủ để tải thông tin này cho url: http://example.url/

Bài đăng thứ hai này có thể ảnh hưởng đến một số trang web. Nếu bạn muốn gửi POST một lần nữa, mở một tab mới trong Firefox, URL sử dụng 'about: config', thiết lập giá trị boolean 'extensions.firebug.allowDoublePost' true Giá trị này được thiết lập lại mỗi khi bạn khởi động lại Firefox Vấn đề này sẽ biến mất khi https://bugzilla.mozilla.org/show_bug.cgi?id=430155 được gửi đi.

+0

Tôi cũng có điều tương tự như vậy. Tôi cần một giải pháp mà sẽ ngăn chặn điều này xảy ra cho những người có verisons cũ của trình duyệt mặc dù. –

+0

Bị mắc kẹt với cùng một vấn đề và điều này là do firebug. Tắt firebug và hoạt động tốt. Nhưng cần firebug để gỡ lỗi mã. Tôi không thấy khóa này 'extensions.firebug.allowDoublePost' trong about: config. – vsingh

+0

Tôi cũng không thể tìm thấy 'extensions.firebug.allowDoublePost' trong about: config. Tôi đang sử dụng FireFox 5.0 với Firebug 1.7.3 –

1

Tôi cũng có điều này xảy ra với tôi một lần trong Firefox - điều này có thể xảy ra trong một số trường hợp khi bạn "Xem nguồn". Bài đăng đôi Firebug giống như một vấn đề tương tự.

Cuối cùng, tuy nhiên, điều tốt là bạn đã gặp phải điều này - sẽ rất tệ nếu tính phí gấp đôi thẻ tín dụng có thể đơn giản như nhấn nút quay lại sau khi đặt hàng. (Và với tư cách là nhà phát triển cho một công ty thương mại điện tử, tôi có thể cho bạn biết rằng điều này xảy ra mọi lúc. Nếu quy trình thanh toán của bạn có bốn bước/trang, hãy tưởng tượng sự tàn phá mà bạn có thể làm hỏng bằng cách mở bước 3 trong cửa sổ trình duyệt, quay trở lại bước trước trong cửa sổ đầu tiên, sau đó hoàn thành đơn đặt hàng trong cửa sổ trình duyệt thứ hai ... tin tôi đi, tôi đã học được một cách khó khăn Bạn sẽ ngạc nhiên trước những gì mọi người làm để khám phá Hawaii tính phụ phí vận chuyển ở bước 3.)

Nonce là một giải pháp; khác là chỉ cần làm một kiểm tra sanity trên trang xử lý thẻ tín dụng. Tìm trong cơ sở dữ liệu của bạn và nói "chờ một phút ... đơn đặt hàng này đã được tính phí!" Sau đó, nôn mửa với một thông báo lỗi duyên dáng. Hi vọng điêu nay co ich!

4

Nó có thể không phải là firebug.

Tôi đã gặp vấn đề tương tự năm ngoái (tuy nhiên, trong trường hợp của tôi, đó là một chuỗi các yêu cầu GET bất kỳ khi xem một tệp phương tiện độc lập: GIF, JPG, WMV, v.v.).

Tôi đã tắt tất cả các tiện ích mở rộng của mình và sau đó thử bật lại từng tiện ích mở rộng, kiểm tra từng tiện ích mở rộng để xem liệu tiện ích có gây ra sự cố hay không. Hóa ra là phần mở rộng của Skype, trong trường hợp của tôi.

Vì vậy, không chỉ dựa vào kiến ​​thức cũ mà nó là firebug. Nếu bạn thực sự trau dồi vấn đề, bạn có thể khám phá ra rằng đó là một cái gì đó hoàn toàn khác.

+1

Tôi đồng ý với tuyên bố này. Tôi có FireBug 1.7.3 đã cài đặt trình duyệt FireFox 5.0, đã vô hiệu hoá nó và vẫn thấy các yêu cầu trùng lặp được gửi đi. Nó có thể chỉ là một vấn đề firefox ... –

0

Cảm ơn các câu trả lời tuyệt vời tại đây. Trong trường hợp của tôi, nó hóa ra là FireBug (phiên bản 1.05) với FireFox 2.0.0.20. Khi tôi tắt bổ trợ FireBug, các bài đăng kép sẽ dừng lại.

1

Ngay cả khi nonce không phải là giải pháp của bạn cho vấn đề này, bạn cần phải có một nonce anyway! Điều này rất quan trọng đối với bất kỳ loại trang web nào mà một người muốn lừa người khác làm việc gì đó (như bất cứ nơi nào có liên quan đến tiền). Nó được gọi là giả mạo yêu cầu Cross-site, và thường bị chặn bởi một nonce. Xem http://en.wikipedia.org/wiki/CSRF nếu bạn cần thêm thông tin.

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