Chống SPAM cho Community Server bằng CAPTCHA
Một diễn đàn, một bài viết blog, ... khi tác giả viết ra thì đều mong muốn có người bình luận (comment) để làm cho bài viết đó thêm sôi động. Tuy nhiên một vài người không biết vô tình hay cố ý hoặc thường SPAM các lời bình (mà thường là nội dung có những link liên kế đến những trang không tốt chút nào).
Để giải quyết triệt để vấn đề SPAM các lời bình đối với Community Server, mình hướng dẫn các bạn bài sau và khi đó bạn sẽ chống lại các SPAMER bằng cách dùng CAPTCHA
1. Trước tiên download addon từ blog của mình về
2. Giải nén ra, bạn được 2 thư mục là: Install và Source
3. Thư mục Source dùng để bạn tham khảo hoặc phát triển thêm. Mình qua bước tiếp nhe.
4. Thư mục Install gồm có thư mục Web và file Install.txt. Sau đây là từng bước để install cho site của bạn
- Copy file CommunityServer.Hack.Captcha.dll ở thư mục bin vào thư mục bin trên host mà Community Server đang chạy.
- Copy file prototype.js ở thư mục Utility vào thư mục Utility trên đang chạy Community Server. (Lưu ý: thư mục Utility là thư mục con của thư mục root mà mình đang host Community Server)
- Copy file CommunityServer.Hack.Captcha.xml ở thư mục Languages\vi-VN vào thư mục Languages mà site của bạn đang dùng. (Chú ý file: CommunityServer.Hack.Captcha.xml phải nằm cùng cấp với file Resource.xml)
- Copy file: communityserver_override.config vào thư mục root mà Community Server của bạn đang chạy. Chú ý: nếu site của bạn đã có file: communityserver_override.config rồi thì tuyệt đối không copy và ghi chồng vào file cấu hình của bạn nhe. Mà hãy mở file: communityserver_override.config bằng Notepad sau đó copy đoạn sau và paste lại vào cuối file communityserver_override.config của bạn. (Về file: communityserver_override.config ở các bài viết sau mình sẽ hướng dẫn cụ thể hơn vấn đề này.). Sau đây là đoạn code override nếu dùng:
<Override xpath="/CommunityServer" mode="add" where="end">
<Captcha CaptchaLength="4" Chars="a;b;c;d;e;f;g;h;j;k;m;n;q;r;s;t;2;3;4;5;6;7;8;9" Fonts="Georgia;Verdana;Tahoma;Arial;Times New Roman;Garamond;Agency FB" IsAuthenticated="true" SubmitButtonID="btnSubmit;PostButton"/>
</Override>
5. Từng bước cài đặt CAPTCHA cho các form của Community Server
- Xác định page nào cần cài đặt CAPTCHA bằng cách view page đó và dùng kỹ thuật CS Tip: Làm sao biết đường dẫn file gốc đang xem. Ví dụ ở đây mình muốn cài đặt CAPTCHA cho form bình luận của 1 blog. Khi đó mình xác định được filename là: /themes/blogs/hack/post.aspx
- Giờ tìm đúng đường dẫn file name này (/themes/blogs/hack/post.aspx) và mở bằng Notepad lên. Sau đó tìm đến control có name là: <CSBlog:WeblogPostCommentForm />, bạn để ý kỹ các form control của: Community Server luôn kết thúc với suffix: Form
- Tại đây bạn ghi nhớ các đều sau đây
- Bạn sẽ thấy 1 thuộc tính là: SubmitButtonId="btnSubmit", nhớ cái: "btnSubmit" lại, và vào file: communityserver_override.config phần xem thuộc tính: SubmitButtonID có btnSubmit chưa ? Nếu chưa thì thêm vào cuối thuộc tính đó giá trị sau: ";btnSubmit" (chú ý: có dấu ; ở phía trước btnSubmit). Chú ý thuộc tính SubmitButtonId luôn luôn phải có đối với các form của: Community Server
- Tiếp tục tìm đến thuộc tính thứ 2 là: ValidationGroup, nếu bạn thấy có rồi thì bỏ qua, còn chưa thấy thì phải thêm vào thuộc tính ValidationGroup này với giá trị là giá trị của 1 ValidationGroup của 1 textbox nào đó trong form của Community Server. Ví dụ bạn sẽ thấy 1 asp control textbox như sau: <asp:TextBox id="tbName" runat="server" Columns="60" ValidationGroup="CreateCommentForm" /> thì khi đó giá trị của ValidationGroup là CreateCommentForm. Khi đó bạn phải thêm vào cho control WeblogPostCommentForm này giá trị như sau: ValidationGroup="CreateCommentForm" (giống với ValidationGroup của cái texbox này)
- Tiếp theo tìm đến đường dẫn cụ thể của form control này. Cụ thể ở đây là: WeblogPostCommentForm, mở Community Server mà bạn có thể run bằng source (xem bài hướng dẫn). Sau đó dùng chức năng: Find All files... của Visual Studio, tìm chữ: WeblogPostCommentForm nó sẽ trả về cho bạn rất nhiều kết quả, tuy nhiên bạn chỉ cần tìm đến kết quả có chữ: public class WeblogPostCommentForm, double vào chữ này sẽ mở ra class mà mình cần xem. Khi đó bạn sẽ thấy được cái gọi là namespace, lúc này là: CommunityServer.Blogs.Controls, giờ kết hợp lại với WeblogPostCommentForm bạn sẽ có là: CommunityServer.Blogs.Controls.WeblogPostCommentForm. Nhớ cái này lại.
- Mở file:App_Browsers\default.browser bằng Notepad, tại phần <controlAdapters> thêm vào 1 hàng như sau. (Đương nhiên khi thêm xong thì phải lưu lại rồi nhỉ)
<adapter controlType="CommunityServer.Blogs.Controls.WeblogPostCommentForm" adapterType="CommunityServer.Hack.Captcha.CaptchaControlAdapter, CommunityServer.Hack.Captcha" />
chú ý: cái controlType="CommunityServer.Blogs.Controls.WeblogPostCommentForm" đó chính là cái mà mình đã xác định ở bước trên.
6. Đã hoàn thành, giờ mở page này lại và test thử xem thế nào ! Khi đó bạn sẽ thấy như hình dưới đây.

Các thông số trong file communityserver_override.config và file CommunityServer.Hack.Captcha.xml
- communityserver_override.config
- CaptchaLength: Chiều dài của các ký tự khi random ngẫu nhiên ra.
- Chars: Chỉ random trong những ký tự này, cách nhau bằng dấu chấm phẩy
- Fonts: font sử dụng là gì
- IsAuthenticated: nếu true thì tất cả các user đều phải nhập CAPTCHA code mới submit form về server. false chỉ cho những user chưa login vào hệ thống (các user nặc danh). (Khuyến khích: true)
- SubmitButtonID: đó là các ID của button trên các form của Community Server (mình không hiểu sao Community Server nó dùng nhiều cái ID name như vậy ? không thống nhất gì hết --> chỗ này họ coding hơi bị "chuối")
- CaptchaLength: Chiều dài của các ký tự khi random ngẫu nhiên ra.
- CommunityServer.Hack.Captcha.xml
- Captcha_Prompt: text hiện thị trên form yêu cầu user nhập vào textbox
- Captcha_Error: Khi user nhập sai chữ CAPTCHA, thì chuỗi này sẽ hiện thị thông báo.
Hy vọng bài viết này giúp ích cho bạn, và nhớ rằng mình vừa phát hiện ra Community Server version 2008.5 SP1 có đến 194 form lận đó nhe. (Quá nhiều thứ để bạo vệ).
Nếu có gì thắc mắc thì liên hệ với mình nhe.
Ghi chú: bạn hãy tập làm cho form ở đường dẫn sau: /themes/blogs/hack/contact.aspx xem có được không ?








