mirror of
https://gitgud.io/fatchan/haproxy-protection.git
synced 2025-05-09 02:05:37 +00:00
- Make the "checking your browser for robots" look more like cloudflare
- Reduce the default concurrency of the frontend script to 2 threads because any higher seems to crash firefox (and its quick enough even with 2 threads anyway) - Remove the footerlogo from challenge and maintenance page, and update the link
This commit is contained in:
@ -17,8 +17,7 @@ footer{font-size:x-small;margin-top:auto;margin-bottom:20px}.pt{padding-top:30vh
|
|||||||
<body>
|
<body>
|
||||||
<h3 class="pt">Under maintenance. Please try again soon!</h3>
|
<h3 class="pt">Under maintenance. Please try again soon!</h3>
|
||||||
<footer>
|
<footer>
|
||||||
<img src="/img/footerlogo.png">
|
<p>Security and Performance by <a href="https://gitgud.io/fatchan/haproxy-protection/">haproxy-protection</a></p>
|
||||||
<p>Security and Performance by <a href="https://kikeflare.com">Kikeflare</a></p>
|
|
||||||
<p>Vey ID: <code>553d0499f419bd4c66ff48f7d0a27706</code></p>
|
<p>Vey ID: <code>553d0499f419bd4c66ff48f7d0a27706</code></p>
|
||||||
</footer>
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
|
@ -13,7 +13,7 @@ if (window.Worker && crypto.subtle) {
|
|||||||
const challenge = document.querySelector('[data-pow]').dataset.pow;
|
const challenge = document.querySelector('[data-pow]').dataset.pow;
|
||||||
const difficulty = 0;
|
const difficulty = 0;
|
||||||
const start = Date.now();
|
const start = Date.now();
|
||||||
const threads = Math.min(4,Math.ceil(window.navigator.hardwareConcurrency/2));
|
const threads = Math.min(2,Math.ceil(window.navigator.hardwareConcurrency/2));
|
||||||
let finished = false;
|
let finished = false;
|
||||||
const messageHandler = (e) => {
|
const messageHandler = (e) => {
|
||||||
if (finished) { return; }
|
if (finished) { return; }
|
||||||
|
@ -50,36 +50,36 @@ local body_template = [[
|
|||||||
<style>
|
<style>
|
||||||
:root{--text-color:#c5c8c6;--bg-color:#1d1f21}
|
:root{--text-color:#c5c8c6;--bg-color:#1d1f21}
|
||||||
@media (prefers-color-scheme:light){:root{--text-color:#333;--bg-color:#EEE}}
|
@media (prefers-color-scheme:light){:root{--text-color:#333;--bg-color:#EEE}}
|
||||||
.b{display:inline-block;background:#6b93f7;border-radius:50%%;margin:10px;height:16px;width:16px;box-shadow:0 0 0 0 #6b93f720;transform:scale(1)}
|
|
||||||
.b:nth-of-type(1){animation:p 3s infinite}
|
|
||||||
.b:nth-of-type(2){animation:p 3s .5s infinite}
|
|
||||||
.b:nth-of-type(3){animation:p 3s 1s infinite}
|
|
||||||
@keyframes p{0%%{transform:scale(.95);box-shadow:0 0 0 0 #6b93f790}70%%{transform:scale(1);box-shadow:0 0 0 10px #6b93f700}100%%{transform:scale(.95);box-shadow:0 0 0 0 #6b93f700}}
|
|
||||||
.h-captcha{min-height:85px;display:block}
|
.h-captcha{min-height:85px;display:block}
|
||||||
.red{color:red;font-weight:bold}
|
.red{color:red;font-weight:bold}
|
||||||
a,a:visited{color:var(--text-color)}
|
a,a:visited{color:var(--text-color)}
|
||||||
body,html{height:100%%}
|
body,html{height:100%%}
|
||||||
body{display:flex;flex-direction:column;background-color:var(--bg-color);color:var(--text-color);font-family:Helvetica,Arial,sans-serif;text-align:center;margin:0}
|
body{display:flex;flex-direction:column;background-color:var(--bg-color);color:var(--text-color);font-family:Helvetica,Arial,sans-serif;max-width:1200px;margin:0 auto;padding: 0 20px}
|
||||||
details{max-width:80vw;text-align:left;margin:0 auto;}
|
details{transition: border-left-color 0.5s;max-width:1200px;text-align:left;border-left: 2px solid var(--text-color);padding:10px}
|
||||||
summary{text-align:center;}
|
|
||||||
code{background-color:#dfdfdf30;border-radius:3px;padding:0 3px;}
|
code{background-color:#dfdfdf30;border-radius:3px;padding:0 3px;}
|
||||||
h3,p{margin:3px}
|
img,h3,p{margin:0 0 5px 0}
|
||||||
footer{font-size:small;margin-top:auto;margin-bottom:50px}h3{padding-top:30vh}
|
footer{font-size:x-small;margin-top:auto;margin-bottom:20px;text-align:center}
|
||||||
|
img{display:inline}
|
||||||
|
.pt{padding-top:15vh;display:flex;align-items: center}
|
||||||
|
.pt img{margin-right:10px}
|
||||||
|
details[open]{border-left-color: #1400ff}
|
||||||
|
.lds-ring{display:inline-block;position:relative;width:80px;height:80px}.lds-ring div{box-sizing:border-box;display:block;position:absolute;width:32px;height:32px;margin:10px;border:5px solid var(--text-color);border-radius:50%%;animation:lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;border-color:var(--text-color) transparent transparent transparent}.lds-ring div:nth-child(1){animation-delay:-0.45s}.lds-ring div:nth-child(2){animation-delay:-0.3s}.lds-ring div:nth-child(3){animation-delay:-0.15s}@keyframes lds-ring{0%%{transform:rotate(0deg)}100%%{transform:rotate(360deg)}}
|
||||||
</style>
|
</style>
|
||||||
<noscript>
|
<noscript>
|
||||||
<style>.jsonly{display:none}</style>
|
<style>.jsonly{display:none}</style>
|
||||||
</noscript>
|
</noscript>
|
||||||
</head>
|
</head>
|
||||||
<body data-pow="%s">
|
<body data-pow="%s">
|
||||||
<h3>Checking your browser for robots...</h3>
|
%s
|
||||||
%s
|
%s
|
||||||
%s
|
%s
|
||||||
<noscript>
|
<noscript>
|
||||||
|
<br>
|
||||||
<p class="red">JavaScript is required on this page.</p>
|
<p class="red">JavaScript is required on this page.</p>
|
||||||
%s
|
%s
|
||||||
</noscript>
|
</noscript>
|
||||||
<footer>
|
<footer>
|
||||||
<p><a href="https://gitgud.io/fatchan/haproxy-protection/">Open Source Bot Protection</a></p>
|
<p>Security and Performance by <a href="https://gitgud.io/fatchan/haproxy-protection/">haproxy-protection</a></p>
|
||||||
<p>Vey ID: <code>%s</code></p>
|
<p>Vey ID: <code>%s</code></p>
|
||||||
</footer>
|
</footer>
|
||||||
<script src="/js/sha1.js"></script>
|
<script src="/js/sha1.js"></script>
|
||||||
@ -88,7 +88,6 @@ local body_template = [[
|
|||||||
]]
|
]]
|
||||||
|
|
||||||
local noscript_extra_template = [[
|
local noscript_extra_template = [[
|
||||||
<br>
|
|
||||||
<details>
|
<details>
|
||||||
<summary>No JavaScript?</summary>
|
<summary>No JavaScript?</summary>
|
||||||
<ol>
|
<ol>
|
||||||
@ -97,25 +96,35 @@ local noscript_extra_template = [[
|
|||||||
<code style="word-break: break-all;">
|
<code style="word-break: break-all;">
|
||||||
echo "Q0g9IiQxIjtCPSJiMDBiIjtJPTA7RElGRj0kKCgxNiMke0NIOjA6MX0gKiAyKSk7d2hpbGUgdHJ1ZTsgZG8gSD0kKGVjaG8gLW4gJENIJEkgfCBzaGExc3VtKTtFPSR7SDokRElGRjo0fTtbWyAkRSA9PSAkQiBdXSAmJiBlY2hvICRJICYmIGV4aXQgMDsoKEkrKykpO2RvbmU7Cg==" | base64 -d | bash -s %s
|
echo "Q0g9IiQxIjtCPSJiMDBiIjtJPTA7RElGRj0kKCgxNiMke0NIOjA6MX0gKiAyKSk7d2hpbGUgdHJ1ZTsgZG8gSD0kKGVjaG8gLW4gJENIJEkgfCBzaGExc3VtKTtFPSR7SDokRElGRjo0fTtbWyAkRSA9PSAkQiBdXSAmJiBlY2hvICRJICYmIGV4aXQgMDsoKEkrKykpO2RvbmU7Cg==" | base64 -d | bash -s %s
|
||||||
</code>
|
</code>
|
||||||
<li>Set a cookie named <code>z_ddos_pow</code> with the value as the number the script outputs.
|
<li>Set a cookie named <code>z_ddos_pow</code> with the value as the number the script outputs, and path <code>/</code>.
|
||||||
<li>Remove "/bot-check?" from the url, and load the page again.
|
<li>Remove <code>/bot-check?</code> from the url, and load the page again.
|
||||||
</ol>
|
</ol>
|
||||||
<small>If you don't want to run untrusted code (you shouldn't), simply remove the pipe to sh to see the decoded script before running it. If you don't know what that means, you can't be helped. Additionally, the JavaScript for this page is open source and available <a href="https://gitgud.io/fatchan/haproxy-protection/-/tree/master/haproxy/js">here</a>.</small>
|
|
||||||
</details>
|
</details>
|
||||||
]]
|
]]
|
||||||
|
|
||||||
-- 3 dots animation for proof of work
|
-- title with favicon and hostname
|
||||||
|
local site_name_section_template = [[
|
||||||
|
<h3 class="pt">
|
||||||
|
<img src="/favicon.ico" width="32" height="32">
|
||||||
|
%s
|
||||||
|
</h3>
|
||||||
|
]]
|
||||||
|
|
||||||
|
-- spinner animation for proof of work
|
||||||
local pow_section_template = [[
|
local pow_section_template = [[
|
||||||
<div>
|
<h3>
|
||||||
<div class="b"></div>
|
Checking your browser for robots 🤖
|
||||||
<div class="b"></div>
|
</h3>
|
||||||
<div class="b"></div>
|
<div class="jsonly">
|
||||||
|
<div class="lds-ring"><div></div><div></div><div></div><div></div></div>
|
||||||
</div>
|
</div>
|
||||||
]]
|
]]
|
||||||
|
|
||||||
-- message, hcaptcha form and submit button
|
-- message, hcaptcha form and submit button
|
||||||
local captcha_section_template = [[
|
local captcha_section_template = [[
|
||||||
<p>Please solve the captcha to continue.</p>
|
<h3>
|
||||||
|
Please solve the captcha to continue.
|
||||||
|
</h3>
|
||||||
<form class="jsonly" method="POST">
|
<form class="jsonly" method="POST">
|
||||||
<div class="h-captcha" data-sitekey="%s"></div>
|
<div class="h-captcha" data-sitekey="%s"></div>
|
||||||
<script src="https://hcaptcha.com/1/api.js" async defer></script>
|
<script src="https://hcaptcha.com/1/api.js" async defer></script>
|
||||||
@ -132,6 +141,7 @@ function _M.view(applet)
|
|||||||
generated_work = utils.generate_secret(applet, pow_cookie_secret, true, "")
|
generated_work = utils.generate_secret(applet, pow_cookie_secret, true, "")
|
||||||
|
|
||||||
-- define body sections
|
-- define body sections
|
||||||
|
local site_name_body = ""
|
||||||
local captcha_body = ""
|
local captcha_body = ""
|
||||||
local pow_body = ""
|
local pow_body = ""
|
||||||
local noscript_extra_body = ""
|
local noscript_extra_body = ""
|
||||||
@ -149,6 +159,7 @@ function _M.view(applet)
|
|||||||
--
|
--
|
||||||
|
|
||||||
-- pow at least is always enabled when reaching bot-check page
|
-- pow at least is always enabled when reaching bot-check page
|
||||||
|
site_name_body = string.format(site_name_section_template, host)
|
||||||
if captcha_enabled then
|
if captcha_enabled then
|
||||||
captcha_body = string.format(captcha_section_template, captcha_sitekey)
|
captcha_body = string.format(captcha_section_template, captcha_sitekey)
|
||||||
else
|
else
|
||||||
@ -157,7 +168,7 @@ function _M.view(applet)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- sub in the body sections
|
-- sub in the body sections
|
||||||
response_body = string.format(body_template, generated_work, pow_body, captcha_body, noscript_extra_body, ray_id)
|
response_body = string.format(body_template, generated_work, site_name_body, pow_body, captcha_body, noscript_extra_body, ray_id)
|
||||||
response_status_code = 403
|
response_status_code = 403
|
||||||
elseif applet.method == "POST" then
|
elseif applet.method == "POST" then
|
||||||
local parsed_body = url.parseQuery(applet.receive(applet))
|
local parsed_body = url.parseQuery(applet.receive(applet))
|
||||||
|
Reference in New Issue
Block a user