Think side hustles are still a trend? Think again. Once upon a time, digital side hustles were seen as a fad, but those days are long gone. Forget fl…
In what security experts are calling the most significant breach of a nation-state cyber operator since the iSoon leak earlier this year, two mysteri…
A sophisticated cyber threat actor exploited a critical Citrix NetScaler vulnerability for nearly two months before its discovery, successfully breac…
You have a business to run. The last thing you want to worry about is a server crashing or a security threat you don't understand. Choosing a tec…
In today's rapidly evolving business landscape, agility and adaptability are paramount. For accounts payable (AP) departments, this translates to…
A previously unknown vulnerability in WinRAR has been actively exploited by Russian-aligned hackers to infiltrate corporate networks through sophisti…
The UK’s new age verification rules have gone live under the Online Safety Act. Sites hosting adult or sensitive content now require strict age check…
The marketing team swears their campaign generated 500 new leads last month. The sales department insists they only received 200. Meanwhile, customer…
Security researcher James Kettle has published groundbreaking research exposing fundamental vulnerabilities in HTTP/1.1 that led to critical security…
OpenAI just dropped GPT-5, and this isn't your typical AI upgrade—it's a fundamental shift in how artificial intelligence works. The new mode…
const config = {
safeID = 'safelink',
safeURL: ['/p/safelink.html'],
timer: 15,
redirect: true,
text: {
wait: 'The link will appear in 0 second',
direct: 'You’ll be redirected to the download link in 0 second',
shifted: 'Redirecting... [link] if you’re not redirected automatically.',
click: 'Click here',
btn: 'Direct to link.'
}
};
(() => {
const randomURL = url => url[Math.floor(Math.random() * url.length)];
const safeLink = () => config.safeURL.some(path => location.pathname.endsWith(path));
const safeMessage = (text, time) => {
const [start, end] = text.split('0');
return `${start} ${time} ${end}.
`;
};
const outboundLinks = () => {
const links = document.querySelectorAll('a.safeurl[href]');
if (!links.length) return;
links.forEach(anchor => {
const encoded = encodeURIComponent(btoa(anchor.href));
Object.assign(anchor, {
href: `${location.origin}${randomURL(config.safeURL)}?go=${encoded}`,
target: '_self',
rel: 'noopener'
})
})
};
const handleLink = () => {
const params = new URLSearchParams(location.search);
const encoded = params.get('go');
if (!encoded) return;
const link = atob(decodeURIComponent(encoded))
params.delete('go');
history.replaceState({}, '', location.pathname + (params.toString() ? '?' + params : ''));
let counter = config.timer;
const label = config.redirect ? config.text.direct : config.text.wait;
const box = document.getElementById(config.safeID);
if (!box) return;
box.removeAttribute('hidden');
box.innerHTML = safeMessage(label, counter);
const countdown = setInterval(() => {
counter--;
box.innerHTML = safeMessage(label, counter);
if (counter > 0) return;
clearInterval(countdown);
if (config.redirect) {
box.innerHTML = `${config.text.shifted.replace('[link]', `${config.text.click}`)}
`;
location.href = link;
} else {
box.innerHTML = '';
const btn = document.createElement('a');
//btn.className = 'btn';
btn.href = link;
btn.target = '_blank';
btn.rel = 'nofollow noopener noreferrer';
btn.innerHTML = `${config.text.btn}`;
box.appendChild(btn);
}
}, 1000)
};
safeLink() ? handleLink() : outboundLinks();
})();