говорит компилятору игнорировать любые символы ESC в строке.
Просто хотел разъяснить этого..., это не говорит ему игнорировать символы ESC, это на самом деле говорит компилятору интерпретировать строку как литерал.
, Если Вы имеете
string s = @"cat
dog
fish"
, это на самом деле распечатает как (обратите внимание, что это даже включает пробел, используемый для добавления отступа):
cat
dog
fish
Используйте скрытое поле в вашей форме, которое содержит токен, созданный вашим приложением. Сохраните токен в пользовательской сессии. Когда форма будет отправлена, ваше приложение проверит, что значение скрытого поля идентично значению, сохраненному в пользовательском сеансе.
Если оно идентично, то вы знаете, что отправленная форма пришла из того места, откуда она должна поступить. .
Вы можете включить в форму скрытое поле, которое будет SHA1Hash ("some-secret" + Remote_IP + PerSessionSecret).
PerSessionSecret - это то, что вы автоматически создаете в начале сеанс. "some-secret" - это глобальное секретное значение, которое немного поможет в случае, если случайно сгенерированный PerSessionSecret окажется недостаточно случайным.
Затем проделайте те же вычисления при отправке формы, и вы поймете, что это наиболее вероятно отправлено тем же клиентом, которому оно было отправлено. (Конечно, если у вас есть несколько клиентов за одним адресом, например прокси или NAT, вы не сможете надежно их различить).
Старый поток, но все еще может быть полезен.
Если у вас не задана информация о сеансе (лучший вариант), вы можете включить скрытое поле с зашифрованной меткой времени, а затем сравнить его (после расшифровки) с текущим временем в конце процесса, чтобы убедиться, что оно относительно близко и, следовательно, настолько свежи, насколько вы сочтете необходимым.