как предотвратить межсайтовый скриптинг в форме InfoPath - PullRequest
0 голосов
/ 21 декабря 2011

В некоторых областях нашего сайта есть формы InfoPath для отправки запросов. Примером может служить форма запроса, в которой пользователь может задать вопрос сотруднику, который также может ответить на сообщение.

Существует возможность, что кто-то может ввести в JavaScript один из элементов управления InfoPath (тема или тело сообщения) и отправить данные через форму InfoPath. Затем код JavaScript запускается на стороне персонала, и на этой странице появляется сообщение с предупреждением. Я много исследовал, но не нашел однозначного ответа.

Есть ли прямой способ ограничить / предотвратить XSS для этого типа проверки? Любые предложения будут полезны.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

если HTML вашего персонала генерируется с помощью Javascript, то вы можете использовать innerText, чтобы избежать любой интерпретации HTML-разметки:

document.getElementById('text').innerText = untrustedOutput;

если это серверная часть, вы можете посмотреть ответ benban123 и адаптировать его под свой язык. В php я бы использовал:

htmlentities( $text );

(см .: http://www.php.net/manual/en/function.htmlentities.php). но я не уверен в его эффективности, XSS многочисленны.

РЕДАКТИРОВАТЬ: Если ваш текст предназначен только для отображения через функцию javascript alert(msg), я думаю, что вы в безопасности, так как не будут интерпретироваться (возможно, за исключением экранированных символов новой строки /n).

0 голосов
/ 21 декабря 2011

Вы можете кодировать текст, например,

var titleValue = '<'+'script type="text/javascript">alert(123);<'+'script>',
            encodedValue = [],
            c;
        for (var i = 0;i < titleValue.length;i ++) {
            c = titleValue.charAt(i);
            if (c == '<')
                encodedValue.push('&lt;');
            else if (c == '>')
                encodedValue.push('&gt;');
            else if (c == '&')
                encodedValue.push('&amp;');
            else if (c == '"')
                encodedValue.push('&quot;');
            else
                encodedValue.push(c);
        }
        alert('encoded value is: ' + encodedValue.join(''));

С уважением,

бен

...