Защита запросов Ajax в ASP.net с помощью аутентифицированных веб-форм - PullRequest
5 голосов
/ 27 марта 2011

я уже читал Защита запросов AJAX через GUID а также Защита запроса ajax , Теперь позвольте мне объяснить мой сценарий, ниже приведен фрагмент кода, который может помочь при объяснении в предмете.

[WebMethod[EnableSession = True]
[ScriptMethod]

    public static string CreateTitle(string strTitleName)
    {
    string strResult = "Custom jSon string";
    if(Session["Authorized"] == "True" && !String.IsNullOrEmpty(strTitleName))
    {
         String strTitle = Server.HtmlEncode(strTitleName);
         InsertRecordInDB(strTitle);
         strResult = "Custom jSOn string" + EncryptMD5("record id");
    }
           return strResult;
    }

и ниже - это вызов javascript для отправки в параметрах. btnCreateTitle_click - это событие нажатия на стороне клиента кнопки. txtTitle - текстовое поле, принимающее название заголовка. На странице также создаются валидаторы для проверки текстового поля. CreateTitle - метод страницы, который я вызываю с помощью scriptmanager

function btnCreateTitle_Click(evnt){
if(Page.ClientValidate()){
if($get("txtTitle")){
PageMethods.CreateTitle($get("txtTitle").value,success,failure,context);
}}}

функция успеха показывает сообщение о том, что заголовок был создан, и ссылку с зашифрованным идентификатором записи в виде строки запроса на URL для просмотра сведений о созданном заголовке.

Теперь актуальный вопрос,

  1. Это достаточно безопасно? Чего мне не хватает?
  2. Как я могу сделать процесс более безопасным и быстрым?

1 Ответ

4 голосов
/ 04 июня 2011

Несмотря на то, что любой метод является ограниченным для аутентифицированных и авторизованных пользователей, когда вы выставляете идентификаторы db в строках запроса, вы открываете возможность того, что аутентифицированный и авторизованный пользователь может стремиться получить доступ к записям, которых они не имеют.Это особенно верно, когда идентификаторы БД являются целыми числами или некоторым другим легко угадываемым идентификатором.Использование Guids в качестве идентификаторов базы данных может снизить риск этого, хотя и не совсем.

То, что вам всегда нужно помнить, это НЕ ДОВЕРЯТЬ ВХОДУ.Безопасность через неизвестность (т.е. шифрование и т. Д.) Не является надежным методом.Ваша служба всегда должна проверять, разрешено ли текущему пользователю получать запрошенные записи.Иногда это называется безопасностью на уровне строк.Это может быть сделано только программно.

например, вместо того, чтобы только определять, что кто-то уполномочен просматривать запись, вы должны убедиться, что у него есть права на доступ к запрашиваемой записи.

Это означает, что вам нужен какой-то способсвязанных записей для аутентифицированного пользователя.

Кстати: любой запрос HTTP проверен на потенциально опасный ввод.

Надеюсь, это поможет,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...