前端如何效验安全域名?

发布于 2022-09-12 23:31:24 字数 777 浏览 45 评论 0

场景

https://www.t.com/login.html?redirect=${url}

登录后locaction.href到redirect 这个url地址

但是我要保证这个url 是我主域名以及我非一级域名的安全域名,如何做效验?

诉求

求一个正则:

  1. 开头可能存在https:// 或者http://
  2. 其次:字母或者数字或者-或者. 的组合
  3. 其次:t.cn 或者t.cn/* 结尾

匹配:

t.cn
t.cn/sss
s.t.cn
s.t.cn/
www.t.cn
s.t.cn/sss
https://t.cn
https://www.t.cn
https://www.t.cn/34343
https://t.cn/fsffdsf
https://ss.t.cn
https://s3-4s.t.cn
https://s3s.t.cn
https://zz.ss.t.cn
https://ss.t.cn/fsfsfs
https://ss.t.cn/fs/435/sf

不匹配:

htttp://danger.com/a=t.cn
htttp://danger.com?a=t.cn
htttp://danger.com/t.cn
htttp://3t.cn
htttp://s.3t.cn

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你又不是我 2022-09-19 23:31:24
function isValid(url) {
    if (!url.startsWith('http')) url = 'http://' + url;
    try { 
        return new URL(url).host.endsWith('t.cn');
    }catch(e) {
        return false;
    }
}
isValid('s.t.cn/sss')

并不建议用正则,使用原生的 URL 对象进行解析地址更加标准。

捎一片雪花 2022-09-19 23:31:24
console.log(`t.cn
t.cn/sss
s.t.cn
s.t.cn/
www.t.cn
s.t.cn/sss
https://t.cn
https://www.t.cn
https://www.t.cn/34343
https://t.cn/fsffdsf
https://ss.t.cn
https://s3-4s.t.cn
https://s3s.t.cn
https://zz.ss.t.cn
https://ss.t.cn/fsfsfs
https://ss.t.cn/fs/435/sf`.split('\n').map(test));

console.log(`htttp://danger.com/a=t.cn
htttp://danger.com?a=t.cn
htttp://danger.com/t.cn
htttp://3t.cn
htttp://s.3t.cn
---.t.cn
...t.cn
s-.t.cn
-s.t.cn
.s.t.cn
s..t.cn
s-.t.cn`.split('\n').map(test));

function test(url) {
    // 考虑了是否是合法域名的正则
    return /^(https?:\/\/)?([\da-zA-Z]+(-?[\da-zA-Z])*\.)*t\.cn(\/.*)?$/.test(url)
}
错々过的事 2022-09-19 23:31:24
/^(https?:\/\/)?([a-zA-Z0-9]{0,}(-?[a-zA-Z0-9]){0,}\.){0,}t\.cn(\/[a-zA-Z0-9]+){0,}\/?$/

解释:
https://regexper.com/#%2F%5E%...

不确定类似这种https://t.cn/sss/ 是否满足需求,给的是满足这种的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文