[Programming] Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
30/03/2009 23:00:05 (+0700) | #1 | 175327 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
Thời gian này em đang nghiên cứu về AJAX, nhưng cũng có nhiều điều mà em cảm thấy không rõ lắm. Em đã tìm hiểu nhiều quyển sách, nhưng cũng chỉ nói sơ qua về các khía cạnh này... Mong mọi người giứp đỡ em ạ!!!
1) AJAX có rất nhiều framework hỗ trợ, mà em thì chẳng biết nên dùng cái nào... Mọi người có thể tư vấn cho em được ko ạ?
2) Trong 1 trang web thuơng mại thì mình nên đưa ajax vào những chức năng nào?
3) Em nghe nói AJAX có khá nhiều lỗ hổng bảo mật. Đó là những lỗi nào và cách khắc phục ra sao.
Thanks mọi người nhiều :X :X :X |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
30/03/2009 23:09:23 (+0700) | #2 | 175329 |
ngonchan
Elite Member
|
0 |
|
|
Joined: 23/02/2004 12:03:51
Messages: 136
Offline
|
|
1. Bạn có thể thử qua JQuery framework, dễ học, dễ sử dụng.
2. vd cho bạn một chức năng: kiểm tra tên đăng nhập khi người dùng đăng kí thành viên vào trang web, sử dụng Ajax để xem tên người dùng vừa nhập vào đã tồn tại hay chưa.
3. Giải quyết 2 cái trên đi đã |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
30/03/2009 23:29:33 (+0700) | #3 | 175333 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
ngonchan wrote:
1. Bạn có thể thử qua JQuery framework, dễ học, dễ sử dụng.
2. vd cho bạn một chức năng: kiểm tra tên đăng nhập khi người dùng đăng kí thành viên vào trang web, sử dụng Ajax để xem tên người dùng vừa nhập vào đã tồn tại hay chưa.
3. Giải quyết 2 cái trên đi đã
Em tưởng là dùng ajax thì là dùng các sự kiện trên javascript, vị dụ sự kiện onblur ở ô text vừa nhập tên đấy xong, thì view source sẽ có đoạn onblur='tên hàm javascript', xóa đoạn đấy đi, lưu vào 1 file html khác, rồi chạy file đó lên. Thế là ko còn kiểm tra được cái tên user đó đã tồn tại chưa Em nghĩ thế, ko biết có đúng ko nữa :"> |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
30/03/2009 23:55:55 (+0700) | #4 | 175339 |
ngonchan
Elite Member
|
0 |
|
|
Joined: 23/02/2004 12:03:51
Messages: 136
Offline
|
|
proA.Vito wrote:
ngonchan wrote:
1. Bạn có thể thử qua JQuery framework, dễ học, dễ sử dụng.
2. vd cho bạn một chức năng: kiểm tra tên đăng nhập khi người dùng đăng kí thành viên vào trang web, sử dụng Ajax để xem tên người dùng vừa nhập vào đã tồn tại hay chưa.
3. Giải quyết 2 cái trên đi đã
Em tưởng là dùng ajax thì là dùng các sự kiện trên javascript, vị dụ sự kiện onblur ở ô text vừa nhập tên đấy xong, thì view source sẽ có đoạn onblur='tên hàm javascript', xóa đoạn đấy đi, lưu vào 1 file html khác, rồi chạy file đó lên. Thế là ko còn kiểm tra được cái tên user đó đã tồn tại chưa Em nghĩ thế, ko biết có đúng ko nữa :">
Chứ mình có nói Ajax không dùng các sự kiện trên Javascript đâu hè Bản thân cái tên Ajax cũng nói lên điều này (truy xuất bất đồng bộ giữa Javascript và XML)
Về đoạn màu đỏ: đây là một trong những lỗi bảo mật của Ajax mà bạn đã hỏi, do đó, để tránh điều này thì bạn phải kết hợp cả client side và server side để tránh tình trạng bị tùy biến và điều khiển trên client side. |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 00:42:29 (+0700) | #5 | 175349 |
TienVe
Member
|
0 |
|
|
Joined: 17/07/2007 16:20:16
Messages: 24
Offline
|
|
Bạn tìm các Video RoadShow của bọn Microsoft về Ajax Tech ra ngồi mà xem, học mà chơi, chơi mà học, |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 06:44:15 (+0700) | #6 | 175405 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
ngonchan wrote:
Chứ mình có nói Ajax không dùng các sự kiện trên Javascript đâu hè Bản thân cái tên Ajax cũng nói lên điều này (truy xuất bất đồng bộ giữa Javascript và XML)
Về đoạn màu đỏ: đây là một trong những lỗi bảo mật của Ajax mà bạn đã hỏi, do đó, để tránh điều này thì bạn phải kết hợp cả client side và server side để tránh tình trạng bị tùy biến và điều khiển trên client side.
Thì em có nói là anh bảo ajax không dùng javascript đâu, câu đó chỉ là tiền đề cho câu sau của em thôi mà :"> Anh có nói rõ việc kết hợp server script và client script hơn được ko ạ |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 09:19:01 (+0700) | #7 | 175417 |
|
learn2hack
Elite Member
|
0 |
|
|
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
|
|
Khi dùng js (clien script) để gửi thông tin lên web server, ở đó bạn sẽ chạy 1 script nào đó như PHP (server script) dùng để tiếp nhận thông tin đó, xử lí nó và trả lại kết quả cho client script trên. Để tránh lỗi bảo mật thì khi server script khi nhận được thông tin cần phải kiểm tra rõ ràng trước khi xử lí, để tránh các lỗi phát sinh, VD như request ko hợp lệ, request chứa các mã nguy hiểm, ...
VD như script về register ngonchan nói ở trên, có thể minh họa tạm thế này:
người dùng đăng kí, điền vào username => js được kích hoạt kèm theo sự kiện nào đó (onblur chẳng hạn) => gửi request (chứa username) đến server => server client, giá sử là PHP sẽ nhận username đó => PHP query database xem username tồn tại ko => PHP trả lại kết quả cho client => JS bắt được kết quả này và hiển thị cho người dùng.
Ajax cũng có 1 quy ước nhằm tránh lỗi bảo mật là không cho phép cross-domain, nếu file js của bạn ko nằm cùng 1 domain với serverscript thì ko thể gửi request đến được.
PS: gọi là server-side và client-side chắc hợp lí hơn nhỉ |
|
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org |
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 09:27:25 (+0700) | #8 | 175419 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
learn2hack wrote:
Khi dùng js (clien script) để gửi thông tin lên web server, ở đó bạn sẽ chạy 1 script nào đó như PHP (server script) dùng để tiếp nhận thông tin đó, xử lí nó và trả lại kết quả cho client script trên. Để tránh lỗi bảo mật thì khi server script khi nhận được thông tin cần phải kiểm tra rõ ràng trước khi xử lí, để tránh các lỗi phát sinh, VD như request ko hợp lệ, request chứa các mã nguy hiểm, ...
VD như script về register ngonchan nói ở trên, có thể minh họa tạm thế này:
người dùng đăng kí, điền vào username => js được kích hoạt kèm theo sự kiện nào đó (onblur chẳng hạn) => gửi request (chứa username) đến server => server client, giá sử là PHP sẽ nhận username đó => PHP query database xem username tồn tại ko => PHP trả lại kết quả cho client => JS bắt được kết quả này và hiển thị cho người dùng.
Ajax cũng có 1 quy ước nhằm tránh lỗi bảo mật là không cho phép cross-domain, nếu file js của bạn ko nằm cùng 1 domain với serverscript thì ko thể gửi request đến được.
PS: gọi là server-side và client-side chắc hợp lí hơn nhỉ
Cảm ơn ý kiến của anh :X ... Nhưng vấn đề em đang thắc mắc là khi mình thì muốn check sự tồn tại của thằng user đó, nhưng do lỗi hổng bảo mật mà em vừa nói, thì công việc check đó ko thực hiện được... Đầu tiên phải lo đến việc có thực hiện được việc check hay không đã rồi mới dám tính nó check thế nào chứ anh hi` hi`. |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 12:04:45 (+0700) | #9 | 175437 |
ngonchan
Elite Member
|
0 |
|
|
Joined: 23/02/2004 12:03:51
Messages: 136
Offline
|
|
proA.Vito wrote:
Cảm ơn ý kiến của anh :X ... Nhưng vấn đề em đang thắc mắc là khi mình thì muốn check sự tồn tại của thằng user đó, nhưng do lỗi hổng bảo mật mà em vừa nói, thì công việc check đó ko thực hiện được... Đầu tiên phải lo đến việc có thực hiện được việc check hay không đã rồi mới dám tính nó check thế nào chứ anh hi` hi`.
À à, có cách này, bạn xem thử có hợp lý không nhé
1.Trong trang reg nick, mặc định bạn sẽ cho disable nút submit (hoặc disable sự kiện submit của form).
2.Khi sau khi dùng Ajax để check cái username đó, nếu và chỉ nếu server side trả về status của username là available thì cũng đồng thời trả về một biến, mình dựa vào giá trị của biến này để enable sự kiện submit form kia. Điều này sẽ tránh được trường hợp như bạn nói, không kiểm tra nick thì sẽ không có giá trị trả về để enable sự kiện submit.
Hy vọng là mình viết không quá khó hiểu |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 12:32:25 (+0700) | #10 | 175443 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
ngonchan wrote:
proA.Vito wrote:
Cảm ơn ý kiến của anh :X ... Nhưng vấn đề em đang thắc mắc là khi mình thì muốn check sự tồn tại của thằng user đó, nhưng do lỗi hổng bảo mật mà em vừa nói, thì công việc check đó ko thực hiện được... Đầu tiên phải lo đến việc có thực hiện được việc check hay không đã rồi mới dám tính nó check thế nào chứ anh hi` hi`.
À à, có cách này, bạn xem thử có hợp lý không nhé
1.Trong trang reg nick, mặc định bạn sẽ cho disable nút submit (hoặc disable sự kiện submit của form).
2.Khi sau khi dùng Ajax để check cái username đó, nếu và chỉ nếu server side trả về status của username là available thì cũng đồng thời trả về một biến, mình dựa vào giá trị của biến này để enable sự kiện submit form kia. Điều này sẽ tránh được trường hợp như bạn nói, không kiểm tra nick thì sẽ không có giá trị trả về để enable sự kiện submit.
Hy vọng là mình viết không quá khó hiểu
Oh` ý tưởng của bạn khá hay... Để mình thử làm xem. Cảm ơn bạn nhé!!! Thế ngoài việc dùng để check form đăng ký ra, ajax còn có thể làm gì nữa nhỉ :"> Nó có nên dùng để làm các công việc như insert user vào db, hay là xóa thông tin gì trong db ko? Hay chỉ nên dùng để truy xuất và hiện thị dữ liệu thôi |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 12:42:44 (+0700) | #11 | 175447 |
ngonchan
Elite Member
|
0 |
|
|
Joined: 23/02/2004 12:03:51
Messages: 136
Offline
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 12:49:46 (+0700) | #12 | 175448 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 14:01:54 (+0700) | #13 | 175465 |
ngonchan
Elite Member
|
0 |
|
|
Joined: 23/02/2004 12:03:51
Messages: 136
Offline
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 20:34:07 (+0700) | #14 | 175481 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
ngonchan wrote:
proA.Vito wrote:
Đấy đấy... Đúng rồi đấy... Vì mình chưa trả lời được 2 câu này nên mình mới phải post bài hỏi mọi người. Đọc sách chỉ thấy nó nói ajax có thể làm được cái này cái nọ mà chẳng nói đến lỗ hổng bảo mật của nó ra sao, ảnh hưởng thế nào tới người dùng Nhưng theo cách hiểu của tớ (còn đang non kém) là không nên làm những công việc như thêm, sửa, xóa db => sợ bị hack lắm Dùng câu lệnh select thôi. Nhưng nghĩ lại thấy nếu nó dùng sql injection, thêm dấu -- vào đằng sau, rồi chèn thêm câu lệnh delete nữa thì chít ( (mặc dù có thể validate input được cái này, nhưng chắc vẫn có cách phá được cái validate đấy :">, nếu không thì cái thằng sql injection không nổi tiếng như thế ) )
Cái 1: đặt mình vào trường hợp của người dùng (chứ không phải của một coder) để biết người dùng cần gì
Cái 2: Thêm, xóa hay sửa thì phải dựa vào khóa chính của trường muốn sửa (id chẳng hạn) --> kiểm tra cái này cộng với kiểm tra (hay kiểm soát) dữ liệu được truyền từ client side
@Cái 1: người dùng thích cái gì nhanh và đơn giản, dễ dùng :"> Thì nếu bình thường mình nghĩ để ứng dụng AJAX ở càng nhiều chức năng càng tốt. Nhưng mình nghĩ là trong câu hỏi của mình, thì nên đặt ở vị trí của 1 hacker, xem nó có thể phá hoại mạnh nhất ở chức năng nào để tránh những nguy cơ đó đi
@Cái 2: Thỉ rõ ràng rồi :"> nhưng vấn đề ở đây là phân biệt thế nào khi dữ liệu truyền vào là ở trong câu lệnh select hay delete :"> |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 22:13:34 (+0700) | #15 | 175489 |
ngonchan
Elite Member
|
0 |
|
|
Joined: 23/02/2004 12:03:51
Messages: 136
Offline
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
31/03/2009 23:10:29 (+0700) | #16 | 175498 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
01/04/2009 04:22:41 (+0700) | #17 | 175528 |
ngonchan
Elite Member
|
0 |
|
|
Joined: 23/02/2004 12:03:51
Messages: 136
Offline
|
|
proA.Vito wrote:
- Mình muốn biết nếu giả sử mình sử dụng ajax để thêm 1 user vào db thì có thể gặp vấn đề bảo mật gì không?
- Tương tự với trường hợp nếu mình muốn xóa 1 message của user trong db bằng ajax
Có. Chỉ nói 1 vài cái đơn giản thôi là có những thằng không có quyền xóa hay add nhưng vẫn muốn chen vào, add thêm hoặc xóa bớt db, hoặc là có những thằng được quyền chỉnh sửa db thì lại đưa những dữ liệu tầm phào vào thay vì đưa những dữ liệu đúng để có thể chỉnh sửa trong db (cái này thì ajax hay không ajax đều có thể gặp) |
|
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
01/04/2009 07:05:09 (+0700) | #18 | 175555 |
|
learn2hack
Elite Member
|
0 |
|
|
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
|
|
(Nhờ mod xóa giùm, bài bị gửi trong lúc mạng chập chờn nên bị trùng lặp) |
|
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org |
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
01/04/2009 07:11:38 (+0700) | #19 | 175556 |
|
learn2hack
Elite Member
|
0 |
|
|
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
|
|
Mình góp ý 1 chút, hình như proA.Vito chưa thực sự thử với ajax thì phải. Nên chú ý 1 chút là nếu đứng về phía client thì ajax thực ra chỉ là Javascript. Vì thế, hacker ko thể trực tiếp "hack" vào database trên server được.
Cái mà bạn nói:
view source sẽ có đoạn onblur='tên hàm javascript', xóa đoạn đấy đi, lưu vào 1 file html khác, rồi chạy file đó lên. Thế là ko còn kiểm tra được cái tên user đó đã tồn tại chưa
thì đối với cái nhìn từ phía server, các thông tin được submit lên (cho dù bạn dùng cách nào đi nữa, ajax hay js thông thường, hoặc chỉ là HTML) thì nó sẽ chứa tên của user đang cần check. Và vì thế, vấn đề kiểm tra được hay ko, nó ko hề phụ thuộc vào phía client, mà là do phía server đảm nhiệm.
Điều này
giả sử mình sử dụng ajax để thêm 1 user vào db
Như đã nói ở trên là client ko thể thêm user vào db được nếu phía server ko cho phép. Vì thế, vấn đề của bạn là chạy các script 1 cách cẩn thận ở phía server, kiểm tra input rõ ràng, ... chứ ko phải đề phòng "hacker lo mấy vụ chỉnh sửa html, chèn js ở phía client".
Tóm lại, là bạn thử viết 1 ứng dụng ajax cho client chèn user vào db xem sao, bạn sẽ thấy cái nào là mấu chốt trong việc chèn user, và ajax có vai trò gì trong quá trình đó. Nếu ko thực sự làm, mình e là các thắc mắc của bạn sẽ xa vời mãi. |
|
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org |
|
|
|
[Question] Re: Em đang có một vài thắc mắc về AJAX mong mọi người giúp đỡ :X |
01/04/2009 11:52:54 (+0700) | #20 | 175589 |
|
proA.Vito
Member
|
0 |
|
|
Joined: 21/01/2009 00:46:01
Messages: 49
Location: Cõi hư vô
Offline
|
|
learn2hack wrote:
Mình góp ý 1 chút, hình như proA.Vito chưa thực sự thử với ajax thì phải. Nên chú ý 1 chút là nếu đứng về phía client thì ajax thực ra chỉ là Javascript. Vì thế, hacker ko thể trực tiếp "hack" vào database trên server được.
Cái mà bạn nói:
view source sẽ có đoạn onblur='tên hàm javascript', xóa đoạn đấy đi, lưu vào 1 file html khác, rồi chạy file đó lên. Thế là ko còn kiểm tra được cái tên user đó đã tồn tại chưa
thì đối với cái nhìn từ phía server, các thông tin được submit lên (cho dù bạn dùng cách nào đi nữa, ajax hay js thông thường, hoặc chỉ là HTML) thì nó sẽ chứa tên của user đang cần check. Và vì thế, vấn đề kiểm tra được hay ko, nó ko hề phụ thuộc vào phía client, mà là do phía server đảm nhiệm.
Điều này
giả sử mình sử dụng ajax để thêm 1 user vào db
Như đã nói ở trên là client ko thể thêm user vào db được nếu phía server ko cho phép. Vì thế, vấn đề của bạn là chạy các script 1 cách cẩn thận ở phía server, kiểm tra input rõ ràng, ... chứ ko phải đề phòng "hacker lo mấy vụ chỉnh sửa html, chèn js ở phía client".
Tóm lại, là bạn thử viết 1 ứng dụng ajax cho client chèn user vào db xem sao, bạn sẽ thấy cái nào là mấu chốt trong việc chèn user, và ajax có vai trò gì trong quá trình đó. Nếu ko thực sự làm, mình e là các thắc mắc của bạn sẽ xa vời mãi.
Uầy anh nói đúng vật!!! :"> Thực sự là em chưa đưa ajax vào 1 dự án thực sự nào cả (mới chỉ làm một số ví dụ cơ bản để nắm cách sử dụng AJAX thôi), nên chưa thực sự hiểu lắm ứng dụng của ajax trong 1 dự án thực tế. Hiện tại mấy hôm nữa thì em cũng phải làm 1 dự án có sử dụng AJAX, nên em post bài trước lên đây để tìm hiểu trước về AJAX, lúc áp dụng vào công việc đỡ bỡ ngỡ hi` hi`!!!
Và em rất cảm ơn những lời góp ý của anh. Em sẽ suy nghĩ về vấn đề này và thực hành thử xem.
|
|
|
|
|
|