java的框架(比如struts2)对于xss攻击、sql注入等黑客方式有防御么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的框架(比如struts2)对于xss攻击、sql注入等黑客方式有防御么?相关的知识,希望对你有一定的参考价值。

框架本身并不具有这些功能。
防止xss,sql等的攻击大部分需要程序员自己注意。
sql注入本身就是sql语句写法的漏洞导致。
xss攻击的防御还是需要对非法字符串进行判断过滤。
参考技术A 框架肯定是没有防黑客的,他只是方便你开发。

Django过滤xss攻击

 

       XSS 是常见的跨站脚本攻击,而且这种类型的错误很不容易被发现或者被开发人员忽视,当然django 框架本身是有这方面的考虑的,比如在模板中自动开启了 escape, 即html转义。何谓转义?就是把html语言的关键字过滤掉。例如,<div>就是html的关键字,如果要在html页面上呈现<div>,其源代码就必须是&lt;div&gt。而如果关闭了转义,那就over 了

  举个例子,在评论框的地方没有用到富文本编辑器,而是让用户自己输入内容,如果某个用户输入了如下类似的东西:

 

这是我的评论,<script>alert(‘xss injection‘);</script>

 

  而我在模板中是这样使用的 {{ comment| safe }}, 由于使用了 safe filter ,所以这里会直接弹出对话框出来。这就是XSS 注入了。真实的项目中是不允许出现这样的情况的,用safe 的目的是为了更好的显示html标签等。

  因为django 自身有一系列的方法。这些方法在 django.utils.html  package中

from django.utils.html import escape, strip_tags, remove_tags

  

 

例如:

   使用strip_tags函数出现的string移除HTML标记:

# import the strip_tags
from django.utils.html import strip_tags
# simple string with html inside.
html = ‘<p>paragraph</p>‘
print html # will produce: <p>paragraph</p>
stripped = strip_tags(html)
print stripped # will produce: paragraph

  

作为过滤同样适用:

{{ somevalue|striptags }}

  

移除特殊tags,你需要使用removetags

 

html = ‘<strong>Bold...</strong><p>paragraph....</p>‘
stripped = removetags(html, ‘strong‘) # removes the strong only.
stripped2 = removetags(html, ‘strong p‘) # removes the strong AND p tags.

在template同样适用:

{{ value|removetags:"a span"|safe }}

  

下面来个懒省事的:

lxml模块有个clearhtml方法,通过下面这个代码就可以把内容过滤成干净的HTML内容。

from lxml.html.clean import clean_html
html = clean_html(html)

  

以上是关于java的框架(比如struts2)对于xss攻击、sql注入等黑客方式有防御么?的主要内容,如果未能解决你的问题,请参考以下文章

xss攻击

如何正确防御xss攻击

特殊字符的过滤,防止xss攻击

Java面试-Struts2

Django过滤xss攻击

web框架--XSS攻击和CSRF请求伪造