XSS注入的本质
就是: 某网页中根据用户的输入, 不期待地生成了可执行的js代码, 并且js得到了浏览器的执行. 意思是说, 发给浏览器的字符串中, 包含了一段非法的js代码, 而这段代码跟用户的输入有关.
常见的XSS注入防护, 可以通过简单的 htmlspecialchars(转义HTML特殊字符), strip_tags(清除HTML标签) 来解决, 但是, 还有一些隐蔽的XSS注入不能通过这两个方法来解决, 而且, 有时业务需要不允许清除HTML标签和特殊字符. 下面列举几种隐蔽的XSS注入方法:
IE6/7 UTF7 XSS 漏洞攻击
隐蔽指数: 5
伤害指数: 5
这个漏洞非常隐蔽, 因为它让出现漏洞的网页看起来只有英文字母(ASCII字符), 并没有非法字符, htmlspecialchars 和 strip_tags 函数对这种攻击没有作用. 不过, 这个攻击只对 IE6/IE7 起作用, 从 IE8 起微软已经修复了. 你可以把下面这段代码保存到一个文本文件中(前面不要有空格和换行), 然后用 IE6 打开试试(没有恶意代码, 只是一个演示):
+/v8 +ADw-script+AD4-alert(document.location)+ADw-/script+AD4-
最容易中招的就是 JSONP 的应用了, 解决方法是把非字母和数字下划线的字符全部过滤掉. 还有一种方法是在网页开始输出空格或者换行, 这样, UTF7-XSS 就不能起作用了.
因为只对非常老版本的 IE6/IE7 造成伤害, 对 Firefox/Chrome 没有伤害, 所以伤害指数只能给 4 颗星.
参考资料:UTF7-XSS不正确地拼接 JavaScript/JSON 代码段
隐蔽指数: 5
伤害指数: 5
Web 前端程序员经常在 PHP 代码或者某些模板语言中, 动态地生成一些 JavaScript 代码片段, 例如最常见的:
var a = '?php echo htmlspecialchars($name); ?';
不想, $name 是通过用户输入的, 当用户输入a’; alert(1); 时, 就形成了非法的JavaScript 代码, 也就是XSS 注入了.
只需要把上面的代码改成:
var a = ?php echo json_encode($name); ?;
去掉单引号, 利用 PHP 的 json_encode() 函数来生成表示字符串的字符串. 这样做是因为,
最好用 json_encode() 函数来生成所有的 JSON 串, 而不要试图自己去拼接
. 程序员总是犯这样的错误: 自己去解析 HTTP 报文, 而不是用现成的成熟的库来解析. 用 json_encode() 的好处还在于, 即使业务要求我要保留单引号时, XSS注入也可以避免.
隐蔽指数最高级, 伤害所有的通用浏览器
. 这种 XSS 注入方式具有非常重要的参考意义.
最后, 根据工作中的经验, 以及我自己和别人犯过的错, 我总结出一个定理: 没有一劳永逸的单一方法可以解决所有 XSS 注入问题.
有用的经验:输出 HTML 代码时 htmlspecialchars输出JavaScript 代码时 json_encode
输入过滤应该用于解决业务限制, 而不是用于解决 XSS 注入(与严进宽出的原则相悖, 所以本条值得讨论)讨论:上文提到的经验第3条, 是一种宽进严出的原则, 和严进宽出原则是相悖的. 其实, 我认为不应该把严进宽出作为一条伪真理, 好像除了它其它的说法都不对了似的. 宽进严出和严进宽出应该具有完全相等的地位, 根据实现的成本进行取舍.
例如, 用户的名字可以采用严进宽出原则, 不允许用户填写单引号, 大于号小于号等. 但是用户的签名呢? 难道就不能填单引号?
后台做一层过滤,前台文本编辑器可以自己做一层标签过滤,不允许一些符号的输入就行了
xss攻击前端能做的有限
因为好多都是url转码来通过参数找漏洞,所以后台也要做一层过滤(例如nodejs的sql库就只允许单行sql,防止通过xss做注入)java之类的有现成多xss过滤器
剩下的就做ip黑名单吧,防止多次攻击
xss注入的内容是给浏览器看的东西,所以只要让浏览器认为它不是需要被解析的html标签或者脚本就可以了。过滤掉'' ,或者把'',''都过滤掉,已经可以保证不会被xss注入了。但是这需要建立在你其他代码没有注入漏洞的前提下。
过滤特定符号
public static String guolv(String a) {
a = a.replaceAll("%22", "");
a = a.replaceAll("%27", "");
a = a.replaceAll("%3E", "");
a = a.replaceAll("%3e", "");
a = a.replaceAll("%3C", "");
a = a.replaceAll("%3c", "");
a = a.replaceAll("", "");
a = a.replaceAll("", "");
a = a.replaceAll("\"", "");
a = a.replaceAll("'", "");
a = a.replaceAll("\\+", "");
a = a.replaceAll("\\(", "");
a = a.replaceAll("\\)", "");
a = a.replaceAll(" and ", "");
a = a.replaceAll(" or ", "");
a = a.replaceAll(" 1=1 ", "");
return a;
}
对于的用户输入中出现XSS漏洞的问题,主要是由于开发人员对XSS了解不足,安全的意识不够造成的。现在让我们来普及一下XSS的一些常识,以后在开发的时候,每当有用户输入的内容时,都要加倍小心。请记住两条原则:过滤输入和转义输出。
一、什么是XSS
XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。
在WEB2.0时代,强调的是互动,使得用户输入信息的机会大增,在这个情况下,我们作为开发者,在开发的时候,要提高警惕。
二、XSS攻击的主要途径
XSS攻击方法只是利用HTML的属性,作各种的尝试,找出注入的方法。现在对三种主要方式进行分析。
第一种:对普通的用户输入,页面原样内容输出。
打开http://go.ent.163.com/goproducttest/test.jsp(限公司IP),输 入:scriptalert(‘xss’)/script, JS脚本顺利执行。当攻击者找到这种方法后,就可以传播这种链接格式的链接 (http://go.ent.163.com/goproducttest/test.jsp?key=JSCODE)如:http: //go.ent.163.com/goproducttest/test.jsp?key=scriptalert(‘xss’) lt;/script,并对JSCODE做适当伪装,如:
http://go.ent.163.com/goproducttest/test.jsp?key=%3c%73%63%72%69%70 %74%3e%61%6c%65%72%74%28%27%78%73%73%27%29%3c%2f%73%63%72%69%70%74%3e,当其 它用户当点此链接的时候,JS就运行了,造成的后果会很严重,如跳去一个有木马的页面、取得登陆用户的COOKIE等。
第二种:在代码区里有用户输入的内容
原则就是,代码区中,绝对不应含有用户输入的东西。
第三种:允许用户输入HTML标签的页面。
用户可以提交一些自定义的HTML代码,这种情况是最危险的。因为,IE浏览器默认采用的是UNICODE编码,HTML编码可以用ASCII方式来写,又可以使用”/”连接16进制字符串来写,使得过滤变得异常复杂,如下面的四个例子,都可以在IE中运行。
1,直接使用JS脚本。
img src=”javascript:alert(‘xss’)” /
2,对JS脚本进行转码。
img src=”javascript:alert(‘xss’)” /
3,利用标签的触发条件插入代码并进行转码。
img onerror=”alert(‘xss’)” /
4,使用16进制来写(可以在傲游中运行)
img STYLE=”background-image: /75/72/6c/28/6a/61/76/61/73/63/72/69/70/74/3a/61/6c/65/72/74/28/27/58/53/53/27/29/29″
以上写法等于img STYLE=”background-image: url(javascript:alert(‘XSS’))”
三、XSS攻击解决办法
请记住两条原则:过滤输入和转义输出。
具体执行的方式有以下几点:
第一、在输入方面对所有用户提交内容进行可靠的输入验证,提交内容包括URL、查询关键字、http头、post数据等
第二、在输出方面,在用户输内容中使用XMP标签。标签内的内容不会解释,直接显示。
第三、严格执行字符输入字数控制。
四、在脚本执行区中,应绝无用户输入。
我来说两句
ass I found this piewce of wrijting at ths site.
I needs to spnd some time learjing more or understanding more.
Thanks for great information I waas looking for this inforation for myy mission.
would by noo means understand. It sorft off feels too complicated and extremely wide for me.
I am taking a look aahead foor yojr next publish, I'll tryy too geet the grasp of it!
youir way oof writing a blog. I saved iit too my bookmark webpae list aand
will be checking back soon. Take a look at my wweb sote as well
and tell me what you think.
It's always helpful too read throough articles from
other authors annd use something frrom teir sites.
additioal news.
I provide credit andd sources back tto you blog? My website is in the very same area off intferest as
yours aand myy usdrs woul certaunly benefit froom a lot of the informatiopn you present here.
Please let me knkw if this okay with you. Many thanks!
It iis the little chyanges thgat mzke tthe mos significant changes.
Thaks a loot for sharing!
knew off anyy fforums that cover the same topics talked about here?
I'd eally love to be a part off comunity where I cann get comments from
other experieenced individuals that share the samee interest.
If yoou have anyy recommendations, ppease leet me know.
Bless you!
wth a cuup off coffee.
Мы трудимся с новыми компонентами, гарантируя прочный время использования и блестящие результаты. Теплоизоляция фасада – это не только сбережение на прогреве, но и внимание о природной среде. Энергоэффективные инновации, какие мы используем, способствуют не только своему, но и сохранению природных ресурсов.
Самое важное: Услуги по утеплению фасадов частных домов у нас открывается всего от 1250 рублей за квадратный метр! Это доступное решение, которое преобразит ваш домик в подлинный уютный корнер с минимальными затратами.
Наши пособия – это не лишь изолирование, это формирование территории, в где каждый компонент преломляет ваш индивидуальный стиль. Мы возьмем во внимание все все твои требования, чтобы осуществить ваш дом еще дополнительно теплым и привлекательным.
Подробнее на http://www
Предоставляем вам оригинальное концепцию в мире дизайна домашней обстановки – шторы плиссе. Если вы желаете к превосходству в всякой детали вашего дома, то эти портьеры станут безупречным выходом для вас.
Что делает шторы плиссе таковыми особенными? Они объединяют в себе в себе изящество, работоспособность и сущность. Благодаря характерной литере, новаторским материалам, шторы плиссе идеально гармонизируются с для какова бы то ни ложи, будь то палата, ложе, печь или должностное пространство.
Закажите шторы плиссе – совершите уют и превосходство в вашем доме!
Чем манят шторы плиссе для вас? Во-первых, их индивидуальный проект, который прибавляет прелесть и стильность вашему обстановке. Вы можете отыскать из разных текстур, оттенков и стилей, чтобы подчеркнуть уникальность вашего дома.
Кроме того, шторы плиссе предлагают многочисленный арсенал практических возможностей. Они могут регулировать уровень света в месте, гарантировать от солнечного света, обеспечива
Наша команда преуспели в своей деятельности и расширим ваш кругозор нашим опытом и знаниями.
Какие услуги мы предоставляем:
• провести технический аудит сайта
• Тщательный анализ вашего сайта и разработка персональной стратегии продвижения.
• Оптимизация контента и технических характеристик вашего сайта для достижения наивысших результатов.
• Регулярное отслеживание и анализ результатов, с целью постоянного улучшения вашего онлайн-присутствия.
Подробнее https://seo-prodvizhenie-ulyanovsk1.ru/
У наших клиентов уже есть результаты: увеличение трафика, улучшение рейтинга в поисковых системах и, конечно, увеличение прибыли. Мы можем предоставить вам бесплатную консультацию, для того чтобы обсудить ваши потребности и разработать стратегию продвижения, соответствующую вашим целям и финансовым возможностям.
Не упустите шанс