2016-10-15 217 views
0

好吧,所以我一直在努力修复我的网站上的xss,所有的时间都失败了。 有串称为“名称”中whitch人们改变他们的名字像 <script>alert("HahS");</script>我已经尝试过XSS在socket.io/node.js聊天?

name = name.replace(/(<|>)/g, ''); 

if(name.indexOf('<') !== -1){ 
return false; 
} 

所有我能够做到的,是对谁发出的XSS用户修复XSS,也是所有其他人登录它仍然弹出。

回答

1

不要为此编写自己的正则表达式。使用encodeURIComponent(),这是以这种方式逃避用户输入的正确方法。

const sanitized = encodeURIComponent(name); 

诀窍是你需要在正确的地方做到这一点。如果您的name参数正在广播给其他客户端,则需要决定要将其转义的位置。一般来说,最好在呈现之前这样做,或者以不危险的方式使用。

这意味着:

  1. 做在客户端上,而不是你的服务器上。
  2. 在客户端初始化/呈现时执行此操作,而不是在潜在恶意用户提交其名称时执行此操作。

如果你有一个很难搞清楚正确的地方,只需添加encodeURIComponent()无处不在,你使用name和向后工作(找出你可以将其删除)。在此期间,您可能会以name为双向逃脱。但对于name的大多数无辜值来说,这是可以接受的,并且这是比开放给XSS攻击更好的默认值。

更多细节:

+0

我有一个很难加入encodeURIComponent方法()无处不在我使用的名称,例如有一个 “bet.name” 如果我将它改为“bet.encodeURIComponent(name)”,该网站甚至根本不工作。 – Petras

+0

如果该值存储在'bet.name'中,则需要使用'encodeURIComponent(bet.name)'。那样有用吗? –

+0

我猜它可以工作,但它非常糟糕,即使是空格“%20”也出现了。有什么办法可以让它看起来更好看(只有删除<,>等)? – Petras