2010-11-29 2 views
1

Я пишу код Javascript для страницы ASP.net.Как получить значение переменной ASP.net в текстовое поле javascript

У меня есть строка «foo», назначенная строковой переменной myString.

Я хотел бы присвоить значение myString переменной JavaScript, так что я пишу в своем ASP.net код:

<script type='txt/javascript' language='javascript'> 
    var stringFromDotNet = '<%=myString%>'; 
</script> 

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

Итак ... Что я могу получить, значение myString, присвоенное переменной в JavaScript?

Обновление: Я пробовал создать страницу с помощью только ASP: Скрытого поля. Похоже, что значения внутри html кодируются.

ответ

5

Вы можете использовать JavaScriptSerializer и гарантированно безопасна против XSS:

<script type="text/javascript"> 
    var stringFromDotNet = <%= new JavaScriptSerializer().Serialize(myString) %>; 
</script> 

Этот подход также позволяет передавать сложные объекты, а не только простые строки:

<script type="text/javascript"> 
    var complexObjectFromDotNet = <%= new JavaScriptSerializer().Serialize(new { id = 123, name = "foo\"' <bar>" }) %>; 
    alert(complexObjectFromDotNet.name); 
</script> 
0

Я думаю, что это может быть ответ, который ищет: http://www.velocityreviews.com/forums/t70655-escape-function-in-asp-net.html#edit352659. В основном, закодировать значение на стороне сервера и unencode его с JavaScript:

var stringFromDotNet = decodeURI(<%=Server.URLEncode(myString)%>); 

Это гарантирует, что котировки и другие опасные символы не нарушат ваш скрипт, или открыть векторы атаки.

0

Вы можете либо назначить переменную JS, используя двойные кавычки, как так

var stringFromDotNet = "<%=myString%>"; 

Или вы могли бы избежать одинарные кавычки и заменить разрывы строк с буквальным «\ г \ п» в строке на стороне сервера.

+1

Это не работает потому что тогда мой пользователь не может использовать двойные кавычки, и я все еще широко открыт для атаки. – 2010-11-29 22:00:17

+0

Вам придется избегать цитат. Если вы назначаете переменную js с помощью двойных кавычек, вам придется избегать двойных кавычек в вашей строке. На вас не влияют пользователи. Вы должны избегать строки во время присвоения значения myString. – 2010-11-29 22:02:25