如何在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语句的服务器端的代码非常类似的攻击)做这两件事情:
- 验证输入,以确保它是你期待什么和如果没有,请不要接受。在你的情况下,这意味着你想确保
url
参数实际上代表一个有效的URL。 - 仅以“安全”的方式使用用户数据,而不会引入对输入的“重新解释”的可能性。在你的情况下,这意味着你不能像这样使用字符串连接来构建你的HTML。 Intead使用
document.createElement()
创建您的a
元素,将其href
属性设置为所需的值(如上所述进行消毒处理),然后在适当的位置在您的DOM中添加新创建的a
元素。
我该如何预防? –
@Yusaf:1.)**验证**输入以确保**完全符合您的期望(即只有在它是正确的URL时才接受它)和2.)不要像这样使用字符串连接,相反[在JS中创建一个'a'元素](https://developer.mozilla.org/en/DOM/document.createElement),直接设置它的'href'属性,然后将该元素插入DOM中适当的位置。 –
看起来像我需要回到绘图板:(。谢谢你。我只知道HTML和CSS和小javascript,因为你可以告诉.. –