2014-02-14 2 views
2

Текст вводится в систему, он может быть НИЧЕГО, он должен храниться в базе данных как текст (ограничение длины здесь), и его нужно избегать, чтобы быть безопасным для XML.Предел длины строки превышен при сбежании

В этом случае (с 6, как предел длины):

string theInput = "hell&"; 

Было бы сбежавшего в

"hell&" 

И затем сохраняется в (усечение по)

"hell&a" 

сейчас проблема в том, что я предполагал, что вход был хорошо экранирован, когда это не так.

В этом случае желаемый результат будет «ад», так как я не заинтересован в том, чтобы сохранить что-то, чей экранированный вывод не может быть сохранен должным образом.

Есть ли встроенная функция для достижения этой цели? (.NET framework 4), например;

SecurityElement.Escape(text, maxLen); //this overload does not exist :(

Если нет, то предложения?

EDIT: просто для уточнения; вход должен быть сохранен в формате XML-Safe (в БД), так как другие части системы нуждаются в этом (в том числе не так просто для обновления клиентов)

+3

Я бы рассмотрел другой подход. Одна возможность: просто сохранить то, что вводит пользователь. Выполняйте экранирование, когда вы извлекаете данные перед их отображением. Если вы должны избегать текста перед его сохранением, напишите CustomValidator, выполните escape как часть проверки ввода и проверки отказа, если результирующая строка слишком длинная. –

+1

Есть ли встроенная функция для достижения этой цели? Нет больше вопроса? –

+1

@ L.B «Если нет, предложения?» –

ответ

0

Нет ничего встроенного, которое бы достигало того, что вы хотите. То, что вам нужно сделать, это выйти из полной строки и затем проверить длину. Если он превышает максимальный, вам нужно будет проверить, падает ли символ с максимальным индексом между & и a;. Если да, то потребуется дальнейший анализ.

+0

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

+0

Боюсь, к сожалению, другого ответа нет. Возможно, вам захочется охватить возможности по мере их поступления, так что в середине и в долгосрочной перспективе ваш код будет охватывать большинство, если не все. – Crono

Смежные вопросы