Допустимые символы в токене AntiForgery __RequestVerificationToken

Я новичок в ASP.NET MVC. Я хочу знать, существует ли уникальный набор допустимых символов для зашифрованного AntiForgeryToken в ASP.NET MVC. Мне нужно подтвердить ключ, когда я его прочитаю. Я указал machineKey в своем файле web.config.

Заранее спасибо. Любые предложения относительно проверки токена будут оценены.


person Parth Pandya    schedule 30.11.2016    source источник


Ответы (1)


Когда вы заглянете в класс MachineKey45CryptoSystem, вы найдете метод Protect, который используется для сериализации маркера защиты от подделки:

public string Protect(byte[] data)
{
    return HttpServerUtility.UrlTokenEncode(MachineKey.Protect(data, MachineKey45CryptoSystem._purposes));
}

Когда вы пойдете глубже, вы найдете метод в HttpEncoder:

internal string UrlTokenEncode(byte[] input) {
 ....
}

Внутри его тела:

base64Str = Convert.ToBase64String(input);

и

// Step 3: Copy in the other chars. Transform the "+" to "-", and "/" to "_"
for (int iter = 0; iter < endPos; iter++) {
    char c = base64Str[iter];

    switch (c) {
        case '+':
            base64Chars[iter] = '-';
            break;

        case '/':
            base64Chars[iter] = '_';
            break;

        case '=':
            Debug.Assert(false);
            base64Chars[iter] = c;
            break;

        default:
            base64Chars[iter] = c;
            break;
    }
}

Подводя итог - допустимыми символами являются: буквы, цифры, - и _.

person pwas    schedule 30.11.2016
comment
Спасибо за ответ. Как мы можем быть уверены, что в токене не будет таких символов, как '!', '~', '*', '#'? Потому что это не обрабатывается в коде is. - person Parth Pandya; 01.12.2016
comment
Convert.ToBase64String гарантирует это. См. спецификацию строки в кодировке 64 base. - person pwas; 01.12.2016