黑客24小时在线接单网站

黑客在线接单,网站入侵,渗透测试,渗透网站,入侵网站

js转义标签语法xss(js符号转义)

本文目录一览:

js如何转义和反转义html特殊字符

js中的特殊字符,加上转义符\ 。

例如:

var txt="We are the so-called "Vikings" from the north." document.write(txt) 【错误】

var txt="We are the so-called \"Vikings\" from the north." document.write(txt) 【正确】

*** 实现HTML标签转义及反转义

简单说一下业务场景,前台用户通过input输入内容,在离开焦点时,将内容在div中显示。

这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。

由于是纯前端操作,不涉及后端,因此需要通过js对输入内容进行转义。

这里提供一个非常简单有效的转义方案,利用了innerHTML和innerText

注:火狐不支持innerText,需要使用

textContent

属性,而IE早期版本不支持此属性,为了同时兼容IE及火狐,需要进行判断操作.

因为innerText(textContent)会获取纯文本内容,忽略html节点标签,而innerHTML会显示标签内容,

所以我们先将需转义的内容赋值给innerText(textContent),再获取它的innerHTML属性,这时获取到的就是转义后文本内容。

代码如下:

function

HTMLEncode(html)

{

var

temp

=

document.createElement("div");

(temp.textContent

!=

null)

?

(temp.textContent

=

html)

:

(temp.innerText

=

html);

var

output

=

temp.innerHTML;

temp

=

null;

return

output;

}

var

tagText

=

"pb123456/b/p";

console.log(HTMLEncode(tagText));//pb123456/b/p

通过测试结果,可以看到html标签及符都被转义后保存。

同理,反转义的 *** 为先将转义文本赋值给innerHTML,然后通过innerText(textContent)获取转义前的文本内容

function

HTMLDecode(text)

{

var

temp

=

document.createElement("div");

temp.innerHTML

=

text;

var

output

=

temp.innerText

||

temp.textContent;

temp

=

null;

return

output;

}

var

tagText

=

"pb123456/b/p";

var

encodeText

=

HTMLEncode(tagText);

console.log(encodeText);//pb123456/b/p

console.log(HTMLDecode(encodeText));

//pb123456/b/p

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

知乎里的控制台js用转义符号怎么写

/。JavaScript的转义字符是"/“,下面是转义字符写法:\b:代表退格。\t:代表一个制表符,即一个Tab空格。\n:换行回车。\v:垂直的制表符。\r:回车。\":双引号。\':单引号。\\:反斜线,即\。\OOO:使用八进制表示的拉丁字母。OOO表示一个3位的八进制整数,范围是000-377。"

js转义特别符号

不用转,提交时加个编码即可,你获取str的时候给它编码一下就行了var str=document.getElementById("ID").value;str = encodeURIComponent(str);就上面这两句,你的replace啊什么的全都不用要,这个encodeURIComponent自会把所有特殊字符转义

js单引号和双引号的转义问题

html的双引号是正常的,每一个属性,例如:value="",一般都有双引号包着。但是用js添加页面节点的时候,需要转义,比如:

var html = "div onclick=\" openUrl( ' s:url value='%{resUrl}'/ ' ) \"/div";

document.getElementById("main").innerHTML = html;

最外面的那个双引号是表示一个字符串变量的意思,而被包在里面的双引号就不起作用,只有在页面显示的时候才会起作用,也就是说js不会认为之一个双引号和第二个双引号是一对,会认为/div";这个双引号才是结尾,因为中间的被"\"转义了。

openUrl函数中的之一对单引号是表示字符串的意思,你省去也不会报错,中间那一对则是标签的属性需要。

最后的问题说明对struts的标签不熟,可以看下struts的property和ognl表达式,最多半个小时可学会。

请教各位大神关于从js写法上避免xss攻击的问题

XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

一、HttpOnly防止劫取Cookie

HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。

我们来看下百度有没有使用。

未登录时的Cookie信息

可以看到,所有Cookie都没有设置HttpOnly,现在我登录下

发现在个叫BDUSS的Cookie设置了HttpOnly。可以猜测此Cookie用于认证。

下面我用PHP来实现下:

?php

header("Set-Cookie: cookie1=test1;");

header("Set-Cookie: cookie2=test2;httponly",false);

setcookie('cookie3','test3',NULL,NULL,NULL,NULL,false);

setcookie('cookie4','test4',NULL,NULL,NULL,NULL,true);

?

script

alert(document.cookie);

/script

js只能读到没有HttpOnly标识的Cookie

二、输入检查

输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如、、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码。

例如网站注册经常用户名只允许字母和数字的组合,或者邮箱 *** ,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。

网上有许多开源的“XSS Filter”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。比如一款php的lib_filter类:

$filter = new lib_filter();

echo $filter-go('1+11');

它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。

三、输出检查

大多人都知道输入需要做检查,但却忽略了输出检查。

1、在HTML标签中输出

如代码:

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

?

div?=$b?/div

a href="#"?=$a?/a

这样客户端受到xss攻击,解决 *** 就是对变量使用htmlEncode,php中的函数是htmlentities

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

?

div?=htmlentities($b)?/div

a href="#"?=htmlentities($a)?/a

2、在HTML属性中输出

div id="div" name ="$var"/div

这种情况防御也是使用htmlEncode

在owasp-php中实现:

$immune_htmlattr = array(',', '.', '-', '_');

$this-htmlEntityCodec-encode($this-immune_htmlattr, "\"script123123;/script\"");

3、在script标签中输出

如代码:

?php

$c = "1;alert(3)";

?

script type="text/javascript"

var c = ?=$c?;

/script

这样xss又生效了。首先js变量输出一定要在引号内,但是如果我$c = "\"abc;alert(123);//",你会发现放引号中都没用,自带的函数都不能很好的满足。这时只能使用一个更加严格的JavascriptEncode函数来保证安全——除数字、字母外的所有字符,都使用十六进制"\xHH"的方式进行编码。这里我采用开源的owasp-php *** 来实现

$immune = array("");

echo $this-javascriptCodec-encode($immune, "\"abc;alert(123);//");

最后输出\x22abc\x3Balert\x28123\x29\x3B\x2F\x2F

4、在事件中输出

a href="#" onclick="funcA('$var')" test/a

可能攻击 ***

a href="#" onclick="funcA('');alter(/xss/;//')"test/a

这个其实就是写在script中,所以跟3防御相同

5、在css中输出

在owasp-php中实现:

$immune = array("");

$this-cssCodec-encode($immune, 'background:expression(window.x?0:(alert(/XSS/),window.x=1));');

6、在地址中输出

先确保变量是否是"http"开头,然后再使用js的encodeURI或encodeURIComponent *** 。

在owasp-php中实现:

$instance = ESAPI::getEncoder();

$instance-encodeForURL(‘url’);

四、处理富文体

就像我写这篇博客,我几乎可以随意输入任意字符,插入图片,插入代码,还可以设置样式。这个时要做的就是设置好白名单,严格控制标签。能自定义 css件麻烦事,因此更好使用成熟的开源框架来检查。php可以使用htmlpurify

五、防御DOM Based XSS

DOM Based XSS是从javascript中输出数据到HTML页面里。

script

var x = "$var";

document.write("a href='"+x+"'test/a");

/script

按照三中输出检查用到的防御 *** ,在x赋值时进行编码,但是当document.write输出数据到HTML时,浏览器重新渲染了页面,会将x进行解码,因此这么一来,相当于没有编码,而产生xss。

防御 *** :首先,还是应该做输出防御编码的,但后面如果是输出到事件或脚本,则要再做一次javascriptEncode编码,如果是输出到HTML内容或属性,则要做一次HTMLEncode。

会触发DOM Based XSS的地方有很多:

document.write()、document.writeln()、xxx.innerHTML=、xxx.outerHTML=、innerHTML.replace、document.attachEvent()、window.attachEvent()、document.location.replace()、document.location.assign()

  • 评论列表:
  •  慵吋美咩
     发布于 2022-09-21 15:15:24  回复该评论
  • 前台用户通过input输入内容,在离开焦点时,将内容在div中显示。这时遇到一个问题,如果用户输入了html标签,则在div显示中,标签被解析。由于是纯前端操作,不涉及后端
  •  鸠骨二囍
     发布于 2022-09-21 17:28:01  回复该评论
  • name ="$var"/div这种情况防御也是使用htmlEncode在owasp-php中实现:$immune_htmlattr = array(',', '.', '-', '_');$this-htmlEntityCod
  •  鸠骨哀由
     发布于 2022-09-21 19:48:08  回复该评论
  • t(1);/script";$b = "img src=# onerror=alert(2) /";?div?=$b?/diva href="#"?=$a?/a这样客户端受到xss攻击,解决方法就是对变量使用html
  •  语酌酌锦
     发布于 2022-09-21 18:36:24  回复该评论
  • 上避免xss攻击的问题js如何转义和反转义html特殊字符js中的特殊字符,加上转义符\ 。例如:var txt="We are the so-called "Vikings" from the north."

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.