2013-04-03 4 views
1

Я закодировал свойство html text с помощью javascript и передал его в мою базу данных как таковую. Я имею в виду в JavaScript для строки, как «Уэльс & БАСовцев»using decodeURIComponent in asp.net

encodeURIComponent(e.value); 

преобразован в «Уэльс% 20PALS»

Я хочу, чтобы преобразовать его обратно в «Уэльсе & БАСовцев» из asp.net. Любая идея о том, как вставить

decodeURIComponent(datatablevalues) 

в моей функции asp.net для возврата нужного текста?

+0

Не стесняйтесь делиться своей логикой с этим решением? Какой смысл кодировать такую ​​строку? Вы добавляете себе ненужную работу ... Кодирование в порядке, но вы должны знать, ПОЧЕМУ и КОГДА это делать. В вашем случае это совершенно бесполезно ... – walther

+0

Я решаю кодировать, чтобы пользователи добавляли специальные символы к своим входам. Но прежде чем я смогу передать это в мою базу данных, мне нужно закодировать его, чтобы предотвратить инъекцию кода. Вы знаете лучший способ? Поделись, пожалуйста. – Peter

+0

В качестве предотвращения внедрения SQL мы используем «параметризованные запросы» или «хранимые процедуры».Кодирование на самом деле не подходит для этого. Html-кодировка хороша, если вы ожидаете, что ваши пользователи добавят материал на ваш сайт, и вы хотите, чтобы они не вводили вредоносный javascript, например. Кодируя строку, браузер просто распечатает содержимое. Что вы делаете, так это то, что вы кодируете строку, добавляете ее в базу данных, но затем пытаетесь ее декодировать обратно в исходное состояние и отображать ее для клиентов. Таким образом, вы уязвимы для многих видов инъекций javascript ... – walther

ответ

4

В качестве предотвращения внедрения SQL мы используем параметризованные запросы или хранимые процедуры. Кодирование на самом деле не подходит для этого. Html-кодировка хороша, если вы ожидаете, что ваши пользователи добавят материал на ваш сайт, и вы хотите, чтобы они не вводили вредоносный javascript, например. Кодируя строку, браузер просто распечатает содержимое. Что вы делаете, так это то, что вы кодируете строку, добавляете ее в базу данных, но затем пытаетесь ее декодировать обратно в исходное состояние и отображать ее для клиентов. Таким образом, вы уязвимы для многих видов инъекций javascript.

Если это то, что вы намеревались, не проблема, просто знайте о последствиях. Знайте «почему» и «как» каждый раз, когда вы принимаете такое решение. Это опасно.

Например, если вы хотите, чтобы ваши пользователи добавляли теги html в качестве средства для улучшения вставленного содержимого, более безопасной альтернативой для этого было бы создание собственного набора тегов (или использование существующего, например, BBCode), поэтому вход никогда не содержит какой-либо html-разметки, а когда вы вставляете его в базу данных, просто сначала проанализируйте его, чтобы переключиться на реальные html-теги. Механизм Asp.net никогда не допустит вредоносного ввода во время запроса (если вы не принудительно его принудительно), и поскольку вы уже контролируете разбор входных данных, вы можете быть уверены, что он безопасен при его выводе, поэтому нет необходимости в некоторой дополнительной обработке.

Просто идея для вас :)

Если вы действительно настаиваете на делать это ваш путь (кодирование -> DB -> Декодирование -> выход), у нас есть несколько вариантов, как это сделать. Я покажу вам один пример:

Например, вы можете создать новое свойство get-only, которое вернет ваши декодированные данные. (вы все равно сохраните исходные закодированные данные, если вам нужно). Что-то вроде этого:

public string DecodedData 
{ 
    get 
    { 
     return HttpUtility.UrlDecode(originalData); 
    } 
} 

http://msdn.microsoft.com/en-us/library/system.web.httputility.aspx

Если вы пытаетесь закодировать вход HTML, может быть, вы бы лучше с другим механизмом кодирования. Не уверен, что javascripts encodeURIComponent может правильно разобрать html.