js过滤xss-JS过滤数组中重复的元素

第三方分享代码
hacker 2年前 (2023-02-27) 黑客破解 219 1

目录介绍:

SpringMVC如何有效的防止XSS注入?

在数据进入数据库之前对非法字符进行转义,在更新和显示的时候将非法字符还原

在显示的时候对非法字符进行转义

如果项目还处在起步阶段,建议使用第二种,直接使用jstl的c:out标签即可解决非法字符的问题。当然,对于Javascript还需要自己处理一下,写一个方法,在解析从服务器端获取的数据时执行以下escapeHTML()即可。

附:Javascript方法:

String.prototype.escapeHTML = function () {

return this.replace(//g, ‘’).replace(//g, ‘’).replace(//g, ‘’).replace(/”/g, ‘"’);}

如果项目已经开发完成了,又不想大批量改动页面的话,可以采用第一种方法,此时需要借助Spring MVC的@InitBinder以及org.apache.commons.lang.PropertyEditorSupport、org.apache.commons.lang.StringEscapeUtils

public class StringEscapeEditor extends PropertyEditorSupport {

private boolean escapeHTML;

private boolean escapeJavaScript;

private boolean escapeSQL;

public StringEscapeEditor() { super(); }

public StringEscapeEditor(boolean escapeHTML, boolean escapeJavaScript, boolean escapeSQL) {super();this.escapeHTML = escapeHTML;

this.escapeJavaScript = escapeJavaScript;

this.escapeSQL = escapeSQL;}@Overridepublic void setAsText(String text) {

if (text == null) {

setValue(null);} else {String value = text;

if (escapeHTML) { value = StringEscapeUtils.escapeHtml(value); }

if (escapeJavaScript) { value = StringEscapeUtils.escapeJavaScript(value); }

if (escapeSQL) { value = StringEscapeUtils.escapeSql(value); } setValue(value); }}@Overridepublic String getAsText() { Object value = getValue(); return value != null ? value.toString() : “”; }}

在上面我们做了一个EscapeEditor,下面还要将这个Editor和Spring的Controller绑定,使服务器端接收到数据之后能够自动转移特殊字符。

下面我们在@Controller中注册@InitBinder

@InitBinder

public void initBinder(WebDataBinder binder) {

这个方法可以直接放到abstract Controller类中,这样子每个Controller实例都能够拥有该方法。

如何防止跨站点脚本攻击

你好~

XSS漏洞产生的原因:

跨站点脚本的主要原因是程序猿对用户的信任。开发人员轻松地认为用户永远不会试图执行什么出格的事情,所以他们创建应用程序,却没有使用任何额外的代码来过滤用户输入以阻止任何恶意活动。另一个原因是,这种攻击有许多变体,用制造出一种行之有效的XSS过滤器是一件比较困难的事情。

但是这只是相对的,对用户输入数据的”编码”和”过滤”在任何时候都是很重要的,我们必须采取一些针对性的手段对其进行防御。

如何创造一个良好的XSS过滤器来阻止大多数XSS攻击代码

1 .需要重点”编码”和”过滤”的对象

The URL

HTTP referrer objects

GET parameters from a form

POST parameters from a form

Window.location

Document.referrer

document.location

document.URL

document.URLUnencoded

cookie data

headers data

database data

防御XSS有一个原则:

以当前的应用系统为中心,所有的进入应用系统的数据都看成是输入数据(包括从FORM表单或者从数据库获取到的数据),所有从当前应用系统流出的数据都看作是输出(包括输出到用户浏览器或向数据库写入数据)

对输入的数据进行”过滤”,对输出数据进行”编码”。这里的”编码”也要注意,必须针对数据具体的上下文语境进行针对性的编码。例如数据是输出到HTML中的那就要进行HtmlEncode,如果数据是输出到javascript代码中进行拼接的,那就要进行javascriptEncode。

如果不搞清楚数据具体输出的语境,就有可能因为HtmlParser()和javascriptParser()两种解析引擎的执行先后问题导致看似严密的”编码”形同虚设。

2. HtmlEncode HTML编码

它的作用是将字符转换成HTMLEntities,对应的标准是ISO-8859-1

为了对抗XSS,在HtmlEncode中要求至少转换以下字符:

--

--

--

" -- "

' -- '

/ -- /

在PHP中:

htmlentities

htmlspecialchars

3. javascriptEncode javascript”编码”

javascriptEncode与HtmlEncode的编码方法不同,HtmlEncode是去编码,而javascriptEncode更多的像转义,它需要使用”\”对特殊字符进行转义。从原理上来讲,这都符合编码函数的一个大原则: 将数据和代码区分开,因为对于HTML Tag来说,我们对其进行”可视化(转换成可以见字符)”的编码可以将数据和HTML的界限分开。而对于javascript来说,我们除了要进行编码之外,还需要对特殊字符进行转义,这样攻击输入的用于”闭合”的特殊字符就无法发挥作用,从而避免XSS攻击,除此之外,在对抗XSS时,还要求输出的变量必须在引号内部,以避免造成安全问题。

escape()

该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ – _ + . / 。其他所有的字符都会被转义序列(十六进制\xHH)替换。

利用这个编码函数,不仅能防御XSS攻击,还可以防御一些command注入。

一些开源的防御XSS攻击的代码库:

PHP AntiXSS

这是一个不错的PHP库,可以帮助开发人员增加一层保护,防止跨站脚本漏洞。

xss_clean.php filter

HTML Purifier

xssprotect

XSS HTML Filter

原文地址:

希望可以帮助到你~望采纳哦~谢谢~

chrome的XSS保护功能拒绝执行JavaScript代码怎么办?

这是因为Chrome的安全机制CSP。

推荐的做法:

不要把代码直接写在html元素里面,而是把button的click事件绑定的代码,放到一段script中

如何实现php的安全最大化?怎样避免sql注入漏洞和xss跨站脚本攻击漏洞

使用php安全模式

服务器要做好管理,账号权限是否合理。

假定所有用户的输入都是“恶意”的,防止XSS攻击,譬如:对用户的输入输出做好必要的过滤

防止CSRF,表单设置隐藏域,post一个随机字符串到后台,可以有效防止跨站请求伪造。

文件上传,检查是否做好效验,要注意上传文件存储目录权限。

防御SQL注入。 

避免SQL注入漏洞

1.使用预编译语句

2.使用安全的存储过程

3.检查输入数据的数据类型

4.从数据库自身的角度考虑,应该使用最小权限原则,不可使用root或dbowner的身份连接数据库。若多个应用使用同一个数据库,也应该为数据库分配不同的账户。web应用使用的数据库账户,不应该有创建自定义函数,操作本地文件的权限。

避免XSS跨站脚本攻击

1.假定所有用户输入都是“邪恶”的

2.考虑周全的正则表达式

3.为cookie设置HttpOnly,防止cookie劫持

4.外部js不一定可靠

5.出去不必要的HTML注释

6. 针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数。

利用最近热门的Xss漏洞能做什么?

1、针对性挂马 所以这类网站一定是游戏网站,银行网站或者是关于qq、taobao或者影响力相当大的网站等,它们必须有我们平常需要盗取的帐号密码;当然也或许是这个站点的浏览量相当高,我们能将更多的马挂出去。 而如果仅仅是平平常常的一个小站点的XSS漏洞,如果我们要挂马,那么莫不如就直接把木马页面地址贴出去。 2、用户权限下操作 这类网站则必须有会员了,而且这些会员有很多有意义的操作或者有我们需要的内部个人资料,所以我们可以通过XSS对已登录访问者进行有权限操作。我认为cookies的盗取应该算作这一项,因为其目的也是获取用户操作权限(盗密码包括在内),从而获取用户某些信息或者进行权限下的相关操作。 3、Dos攻击或傀儡机 这同样需要一个访问量非常大的站点,利用小站点莫不如我们自己攻击或获取信息。我们可以通过此页的访问用户不间断地攻击其他站点,或者进行局域网扫描等等。这类js工具早已经产生,js端口扫描、jikto、xssshell等等。 4、提权 一般这主要发生在论坛或信息管理系统,总之一定要有管理员了。这需要攻击者对目标系统相当熟悉(一般这样的系统需要开源代码),从而知道怎样构造语句进行提权。 5、实现特殊效果 譬如Monyer在百度空间的插入视频,插入版块;譬如一些人在新浪博客或者校内网实现的特殊效果等等。 结论: 从而你应该了解到这些网站应该具有的性质: 极高的访问量,有会员,有管理员,有具有价值的帐号密码,或者有意义进行特殊效果的实现。 如果你读过《Ajax Hacking with XSS》,你应该知道XSS至少包含input XSS和textarea XSS等七种方式。 其中url XSS属于input XSS,这些漏洞大部分属于保留式的XSS,而textarea XSS等一般属于不保留XSS。 这意味着正常访问一个页面是不会触发保留式的XSS的,尽管这是大部分网站具有的漏洞,其中搜索部分又称搜索式XSS漏洞。 所以当你获取了一个input XSS,你仅仅alert出一个小框框。你跟别人大吹大擂,你发现了一个漏洞,并且你可以alert一个框框给他看,但是事实上你什么都做不了。即使你能挂些小木马,那也是很没意义的事情——因为你莫不如直接在自己的虚拟主机里做XSS页面发给别人。 这个跟sql注入不同,XSS毕竟是客户端的东西。sql注入的目的往往是为了得到目标系统的权限,并且sql语句本身执行的就是服务端的指令;但 XSS一般却是为了获得客户端的东西,执行的也是客户端的指令。所以他们可以“'”一下“出错了”而大喊,你却不能因为“alert”出了“xss窗口” 而乱叫。

求采纳

xss.js 的proxy怎么用

在有XSS.JS(持久型或非持久型)的网站上嵌入 监控脚本 ,这样的脚本可以动态生成一个iframe,并可控制iframe的location值。 监控脚本 控制iframe加载同域下的其它文档,且DOM安全允许 监控脚本 抓取、修改这些被加载进来的文档里的值(因为它们都在严格同域下)。接着,我们有一个控制端,可以通过这个 监控脚本 与victim进行实时交互与双向通信.

相关推荐

网友评论

  • (*)

最新评论

  • 访客 2023-02-27 20:39:46 回复

    更多的像转义,它需要使用”\”对特殊字符进行转义。从原理上来讲,这都符合编码函数的一个大原则: 将数据和代码区分开,因为对于HTML Tag来说,我们对其进行”可视化(转换成可以见字符)”的编码可以将数据和HTM

    1