2013-06-28 17 views
18

Tôi đang thiết kế một trang web có vấn đề nếu macro được phép chạy tự do.javascript có thể mô phỏng nhấp chuột vào nút không?

Tôi đã nghĩ ra cách ngăn chặn macro bằng cách mô phỏng các yêu cầu HTTP từ một nút bấm nhưng điều này sẽ vô ích nếu họ có thể chèn tập lệnh javascript chỉ cần "nhấp" nút và tiếp tục như một người dùng bình thường .

Bằng cách mô phỏng nhấp chuột vào nút, ý tôi là, nút được nhấn và nút Biểu mẫu đang chạy với mã php được liên kết với nó.

Logic cho tôi biết javascript có thể thực hiện việc này nhưng tôi muốn biết chắc chắn, cảm ơn bạn đã nhập bất kỳ thông tin nào!

~ Andrew

+0

Bạn có ý nghĩa gì với macro, ý của bạn là tiêm mã javascript vào biểu mẫu? Hoặc là [this] (http://blog.creativeitp.com/posts-and-articles/javascript/javascript-injection-form-editing/) ý bạn là gì –

+0

Có nếu ai đó đã thêm javascript của riêng họ vào trang web của tôi, điều này có thể mô phỏng một nút trên trang web của tôi đang được nhấn. Tôi muốn biết nếu họ có thể (có khả năng) làm việc đó. – AndrewB

+1

Họ sẽ luôn có thể chèn javascript để làm bất kỳ điều gì với trang của bạn, bao gồm gửi yêu cầu http. Không có cách nào bạn có thể tránh nó. –

Trả lời

36

Nút có thể là allways được nhấp theo chương trình. Ví dụ, bạn có thể có một số trang với hình thức như thế này:

<form> 
    <input type="text" /> 
    <button>Do something</button> 
    <input type="submit"> 
</form> 

hơn nó có thể chỉ để mở debug cosole và gõ

document.getElementsByTagName('button')[0].click(); 

mà sẽ nhấn vào nút, hoặc

document.getElementsByTagName('input')[1].click(); 

sẽ nhấp vào nút gửi của biểu mẫu hoặc chỉ

document.forms[0].submit(); 

để gửi biểu mẫu mà không cần nhấp vào nút.

Không có cách nào để ngăn người dùng làm chủ mã JavaScript trên ứng dụng khách. Bạn phải thêm một số xác nhận trên phía máy chủ để ngăn chặn hành động người dùng không mong muốn.

+1

Cảm ơn câu trả lời ngắn gọn, đánh giá cao nỗ lực! – AndrewB

+0

Vâng, câu trả lời tuyệt vời. – Yster

2

điều duy nhất bạn có thể làm là xác thực yêu cầu trên máy chủ.

khi bạn đưa trang này cho khách hàng, bạn không có quyền kiểm soát kỹ thuật về cách sử dụng nó.

gì bạn có thể làm ví dụ, from:

Giả sử bạn đang làm cho trò chơi javascript. Bạn sử dụng AJAX để gửi điểm số của trình phát đến máy chủ để ghi nhật ký. Sau khi xem tập lệnh, người dùng độc hại có thể chạy mã AJAX của bạn để gửi số điểm 1.000.000 ngay cả khi họ kiếm được chỉ 5.000.

Bạn không thể ngăn điều này xảy ra ở phía javascript. Tuy nhiên, có một số cách để xác thực các yêu cầu AJAX ở phía máy chủ, bạn có thể chuyển một "mã thông báo" bảo mật cho javascript mà hacker không thể nhận được.

+0

Tôi đã nghĩ đến việc có một biến phía máy chủ thay đổi thường xuyên. Biến là muối cho đầu vào của người dùng, trong ví dụ về điểm số của bạn, họ có 1000 điểm, sử dụng mã hóa sha512, số muối đó với biến phía máy chủ và sau đó nó biết những gì mong đợi. Nếu mã là chính xác, cập nhật điểm số, thì không. Rõ ràng nếu đây là tất cả các bên php, họ chỉ có thể nhấp vào nút để gửi điểm số của họ, không thay đổi số điểm. Tuy nhiên tôi muốn nó không thể gửi điểm số của họ (trong trường hợp này) – AndrewB

+0

Tôi đoán tôi là một chút quá hy vọng ở đây, tôi sẽ phải giải quyết với CAPTCHAS mặc dù tôi muốn tránh chúng bằng mọi giá: P Tôi sẽ cung cấp cho các ngón tay cái lên cho các nỗ lực mặc dù! – AndrewB

+0

Khi tôi đi về với các ứng dụng di động, đôi khi tôi sử dụng thư viện ssh để mã hóa và chuyển dữ liệu an toàn, có thể một cái gì đó tương tự có thể được thực hiện cho trường hợp của bạn ... –