The javascript below extracts www.google.com from http://mysite.com?url=www.google.com
and writes it as an <a> href link
<script>
var urll = (window.location.search.match(/[?&;]url=([^&;]+)/) || [])[1];
document.write('<a href="http://'+urll+'">url</a>');
</script>
The problem with it is that when it extracts the url the <a> href value it becomes http://mysite.com/www.google.com so the if should state if the original url http://mysite.com?url=www.google.com doesn’t have http:// infront of ?url= then add it after the href value to form <a href="http://www.google.com">url</a>
In a comment for a previous question someone gave me this
if (link.substr(0, 7) !== 'http://') { link = 'http://' + link; }
but I really don’t have a clue on how to implement it because I have never used an if in javascript.
Apart from anything else you’re making yourself suspectible to XSS attacks:
Assume for a moment that the
urlparameter (which an external site can easily spoof by providing a link to your site) contains the string"><b>BOLD!</b><div class=". Suddenly your page would display some bold text, even ‘though you never used a<b>tag in your site. And that’s the most harmless example possible, because the attacker can equally well introduce arbitrary JavaScript into your page (including JS that steals the users cookie!).Moral of the story: never blindly trust user input, and don’t simply convert it to HTML.
To avoid these kinds of attacks (SQL Injection is a very similar attack against server-side code that builds SQL statements) do these two things:
urlparameter actually represents a valid URL.document.createElement()to create youraelement, set itshrefattribute to the desired value (sanitized as stated above) and then add the newly createdaelement in your DOM at the appropriate position.