Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
阻止用户输入javascript而不是url以在href中使用_Javascript_Href_Sanitization - Fatal编程技术网

阻止用户输入javascript而不是url以在href中使用

阻止用户输入javascript而不是url以在href中使用,javascript,href,sanitization,Javascript,Href,Sanitization,我需要阻止用户将javascript放入应该是链接字段的内容中。我知道我可以在他们输入的url的开头检查“javascript:”,但我想知道是否有某种方法可以构造标记,强制它将href作为地址?我觉得这将是一个更好的解决方案,因为人们总是想办法绕过基本检查。没有纯HTML的方法强迫标签将href作为URL 据我所知,您唯一可以做的事情就是检查href属性中的javascript。没有纯HTML方法强制标签将href作为URL处理 据我所知,你唯一能做的就是检查href属性中的javascrip

我需要阻止用户将javascript放入应该是链接字段的内容中。我知道我可以在他们输入的url的开头检查“javascript:”,但我想知道是否有某种方法可以构造
标记,强制它将href作为地址?我觉得这将是一个更好的解决方案,因为人们总是想办法绕过基本检查。

没有纯HTML的方法强迫标签将href作为URL


据我所知,您唯一可以做的事情就是检查href属性中的javascript。

没有纯HTML方法强制标签将href作为URL处理

据我所知,你唯一能做的就是检查href属性中的javascript。

一个有趣的解决方案(如果你问我的话,它非常有效),就是将
http://
放在尚未以它开头的URL前面。这是我的意思的草图:

if(url.slice(0,"http://".length) !== "http://" && url.slice(0,"https://".length) !== "https://") {
    url = "http://" + url;
}
一个有趣的解决方案(如果你问我的话,也是非常有效的),就是把
http://
放在还没有开始的URL前面。这是我的意思的草图:

if(url.slice(0,"http://".length) !== "http://" && url.slice(0,"https://".length) !== "https://") {
    url = "http://" + url;
}

我猜白名单比黑名单好,并检查http(s)协议。

我猜白名单比黑名单好,并检查http(s)协议。

您总是可以预先编写http://或https://协议。可能需要替换以删除任何现有http或https

即使你有

http://javascript:alert('test');

javascript将不会运行。

您可以始终在http://或https://协议前面加上前缀。可能需要替换以删除任何现有http或https

即使你有

http://javascript:alert('test');

javascript将不会运行。

首先,您应该认识到,可以操纵浏览器提交用户想要的任何内容,因此客户端验证既不必要也不充分,只是方便(用户)

鉴于此,我想到了一个简单的过程:

  • 通过在URL的开头要求一个协议规范来强制每个URL都是绝对的
  • 强制协议为{http,https}之一
试试这个:

function validateUrl(value) {
  return value.match(/^(http|https):\/\//) != null;
}

if(validateUrl(inputField.value)) {
  // value is acceptable
} else {
  // value is not an acceptable URL
}

首先,您应该认识到,可以操纵浏览器提交用户想要的任何内容,因此客户端验证既不必要也不充分,只是方便(用户)

鉴于此,我想到了一个简单的过程:

  • 通过在URL的开头要求一个协议规范来强制每个URL都是绝对的
  • 强制协议为{http,https}之一
试试这个:

function validateUrl(value) {
  return value.match(/^(http|https):\/\//) != null;
}

if(validateUrl(inputField.value)) {
  // value is acceptable
} else {
  // value is not an acceptable URL
}

为了什么?是否将此字段发送到服务器?如果是这样的话,验证就应该在最后进行。任何人都可以随意摆弄客户端,让它做任何他们想做的事情。这是为了阻止用户制造XSS攻击。目的是什么?是否将此字段发送到服务器?如果是这样的话,验证就应该在最后进行。任何人都可以和客户端鬼混,让它做任何他们想做的事情。这是为了阻止用户制造XSS攻击。这就是我的想法。我可能只是要求URL以http或HttpSt开头,这就是我的想法。我可能只是要求URL以http或https开头