如何在JavaScript中实现?

问题描述:

http://mysite.com?url=www.google.com 下面提取www.google.com JavaScript而将其写入作为<a>href链路如何在JavaScript中实现?

<script> 
var urll = (window.location.search.match(/[?&;]url=([^&;]+)/) || [])[1]; 
document.write('<a href="http://'+urll+'">url</a>'); 
</script> 

它的问题是,当它提取URL变得http://mysite.com/www.google.com<a>href值,使if应如果状态原始URL http://mysite.com?url=www.google.com没有http://面前?url=然后将其加上href后面的值形成<a href="http://www.google.com">url</a>

在对前一个问题有人评论给了我这个

if (link.substr(0, 7) !== 'http://') { link = 'http://' + link; } 

,但我真的没有对如何实现它,因为我从来没有在JavaScript中使用的if线索。

二话不说你让自己suspectible到XSS attacks

假设一下,如果在url参数(外部网站可以容易恶搞提供了一个链接到你的网站)包含字符串"><b>BOLD!</b><div class="。突然你的网页会显示一些粗体文字,甚至'尽管你从未在你的网站上使用过<b>标签。这是可能的最无害的例子,因为攻击者同样可以将任意JavaScript引入页面(包括窃取用户cookie的JS)。

道德故事:从来没有盲目信任用户输入,而不是简单地将其转换为HTML。

为了避免这些类型的攻击(SQL Injection是针对生成SQL语句的服务器端的代码非常类似的攻击)做这两件事情:

  1. 验证输入,以确保它是你期待什么和如果没有,请不要接受。在你的情况下,这意味着你想确保url参数实际上代表一个有效的URL。
  2. 仅以“安全”的方式使用用户数据,而不会引入对输入的“重新解释”的可能性。在你的情况下,这意味着你不能像这样使用字符串连接来构建你的HTML。 Intead使用document.createElement()创建您的a元素,将其href属性设置为所需的值(如上所述进行消毒处理),然后在适当的位置在您的DOM中添加新创建的a元素。
+0

我该如何预防? –

+1

@Yusaf:1.)**验证**输入以确保**完全符合您的期望(即只有在它是正确的URL时才接受它)和2.)不要像这样使用字符串连接,相反[在JS中创建一个'a'元素](https://developer.mozilla.org/en/DOM/document.createElement),直接设置它的'href'属性,然后将该元素插入DOM中适当的位置。 –

+0

看起来像我需要回到绘图板:(。谢谢你。我只知道HTML和CSS和小javascript,因为你可以告诉.. –

看起来你需要https://developer.mozilla.org/en/JavaScript。 “如果”是任何编程语言的最基本的元素,如果你不明白你真的需要运行一堆基础知识。

+3

http://w3fools.com/ – Zirak

+1

任何人需要的最后一件事是链接到w3schools。 –

+2

请不要链接到w3schools,这是为什么:http://w3fools.com/ – SparK