воскресенье, 19 июня 2011 г.

Использование капчи в формах SharePoint

Любой интернет сайт нуждается в защите от спам-ботов. Простая и эффективная защита от роботов - это капча. Задача этот статья - рассказать как использовать капчу в SharePoint. Для этого мы сделаем три шага - рассмотрим предмет разработки, подберем средства для разработки и разработаем веб-часть с капчей.


Предмет разработки
Капча нужна прежде всего для форм добавления элементов. Было бы очень неудобно для использования капчи изменять стандартную форму добавления элемента. Страницы SharePoint основаны на технологиях ASP.NET WebForms. Все веб-части, находящиеся на странице принадлежат одной форме. При отправки заполненной формы на сервер, обрабатываются все элементы формы, находящиеся в ней. А значит если наша форма добавления элемента и капча будут в разных веб-частях, то при отправки формы обработается и капча и форма добавления.

Подбор средств разработки
Рисовать капчу самим нету смысла - полно сервисов бесплатно предоставляющих свои услуги по генерации капчи. Логично использовать один из них. В этом вопросе мне приглянулась разработка BotDetect. Разработчики описали как сделать веб-часть с капчей при помощи BotDetect. Их вариант неудобен тем, что проверка правильности введенных символов происходит по нажатию кнопки, расположенной на веб-части с капчей. Нам же нужно, чтобы проверка происходила при нажатии на кнопку "Сохранить" формы добавления элемента.

Разработка
Первым делом необходимо установить на компьютер, используемый для разработки, пакет BotDetect CAPTCHA, в частности можно использовать бесплатную версию.
Далее необходимо произвести некоторые правки в web.config файле веб-приложения, для которого разрабатывается веб часть. Эти правки написаны в шаге 2 описания от разработчиков BotDetect. Думаю лучше оставить этот шаг ссылкой на авторов, ибо при внесении ими изменений, статья по ссылке будет актуальнее этого поста.
Следующим шагом необходимо разработать веб-часть капчи. Для этого создаем проект по шаблону Visual Web Part. Нам необходимо внести правки в два файла. Сначала внесем изменения в файл веб-части с расширением ascx. Регистрируем TagPrefix:

  1. <%@ Register TagPrefix="Captcha" Namespace="BotDetect.Web.UI"
  2. Assembly="BotDetect, Version=3.0.7.0, Culture=neutral, PublicKeyToken=74616036388b765f" %>

______________________
Текст подготовлен в Редакторе Блогов от © SoftCoder.ru
и наносим html разметку и необходимые контролы:

  1. <table>
  2. <tr>
  3. <td>
  4. <Captcha:Captcha ID="captchaControl" runat="server" />
  5. </td>
  6. </tr>
  7. <tr>
  8. <td>
  9. <asp:RequiredFieldValidator runat="server" ID="CaptchaRequiredValidator" ControlToValidate="CaptchaInput" Text="Поле обязательно для заполнения" />
  10. <asp:CustomValidator runat="server" ID="CaptchaCorrectValidator" ControlToValidate="CaptchaInput" Text="Не верно" OnServerValidate="CaptchaCorrectValidator_ServerValidate" />
  11. </td>
  12. </tr>
  13. <tr>
  14. <td>
  15. <asp:TextBox ID="CaptchaInput" runat="server" />
  16. </td>
  17. </tr>
  18. </table>

______________________
Текст подготовлен в Редакторе Блогов от © SoftCoder.ru


Вместо кнопки для проверки правильности введенных данных я использую CustimValidator. Для проверки используется серверная функция. С этой функцией возникла загвоздка. Пока по неизвестной мне причине, при нажатии на кнопку "Сохранить" формы добавления элемента в список она вызывается два раза и первый раз в переменной сессии хранится именно то значение, которое ввел пользователь, а второй раз совсем другое значение. Я обошел это поведение при помощи ввода свойства, в котором храню результат первой проверки. Получившейся код:

  1. public void CaptchaCorrectValidator_ServerValidate(object source, ServerValidateEventArgs args)
  2. {
  3. if (!validated)
  4. validated = captchaControl.Validate(CaptchaInput.Text.Trim().ToUpper());
  5. args.IsValid = validated;
  6. }
  7. private bool _validated;
  8. public bool validated { get { return _validated; } set { _validated = value; } }

______________________
Текст подготовлен в Редакторе Блогов от © SoftCoder.ru


Осталось лишь собрать проект и развернуть его на нужном веб-приложении.


Комментариев нет:

Отправить комментарий