diff --git a/.github/README.md b/.github/README.md index a42d3ff..e4829be 100644 --- a/.github/README.md +++ b/.github/README.md @@ -903,150 +903,163 @@ Credit to the following users for contributing to Web-Check - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- - Lissy93 -
- Alicia Sykes -
-
- - liss-bot -
- Alicia Bot -
-
- - muni106 -
- Mounir Samite -
-
- - ChrisCarini -
- Chris Carini -
-
- - brianteeman -
- Brian Teeman -
-
- - GreyXor -
- GreyXor -
-
- - jinnabaalu -
- Jinna Baalu -
-
- - bolens -
- Michael Bolens -
-
- - robinson -
- Lth -
-
- - abhishekMuge -
- Abhishek Muge -
-
- - UlisesGascon -
- Ulises Gascón -
-
- - PhiRequiem -
- PhiRequiem -
-
- - Myzel394 -
- Myzel394 -
-
- - murrple-1 -
- Murray Christopherson -
-
- - t3chn0m4g3 -
- Marco Ochse -
-
- - treatmesubj -
- John Hupperts -
-
- - eltociear -
- Ikko Eltociear Ashimine -
-
- - Gertje823 -
- Gertje823 -
-
- - epreston -
- Ed Preston -
-
- - 0xflotus -
- 0xflotus -
-
+ + Lissy93 +
+ Alicia Sykes +
+
+ + liss-bot +
+ Alicia Bot +
+
+ + n0a +
+ Denis Simonov +
+
+ + muni106 +
+ Mounir Samite +
+
+ + ChrisCarini +
+ Chris Carini +
+
+ + brianteeman +
+ Brian Teeman +
+
+ + GreyXor +
+ GreyXor +
+
+ + bolens +
+ Michael Bolens +
+
+ + vitalykarasik +
+ Vitaly Karasik +
+
+ + robinson +
+ Lth +
+
+ + abhishekMuge +
+ Abhishek Muge +
+
+ + UlisesGascon +
+ Ulises Gascón +
+
+ + PhiRequiem +
+ PhiRequiem +
+
+ + Myzel394 +
+ Myzel394 +
+
+ + murrple-1 +
+ Murray Christopherson +
+
+ + t3chn0m4g3 +
+ Marco Ochse +
+
+ + treatmesubj +
+ John Hupperts +
+
+ + eltociear +
+ Ikko Eltociear Ashimine +
+
+ + Gertje823 +
+ Gertje823 +
+
+ + epreston +
+ Ed Preston +
+
+ + 0xflotus +
+ 0xflotus +
+
@@ -1056,207 +1069,184 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
- - github -
- GitHub -
-
- - koconder -
- Vincent Koc -
-
- - Admonstrator -
- Aaron Viehl -
-
- - tbjers -
- Torgny Bjers -
-
- - emlazzarin -
- Eddy Lazzarin -
-
- - AnandChowdhary -
- Anand Chowdhary -
-
- - shrippen -
- Shrippen -
-
- - bile0026 -
- Zach Biles -
-
- - UlisesGascon -
- Ulises Gascón -
-
- - digitalarche -
- Digital Archeology -
-
- - InDieTasten -
- InDieTasten -
-
- - araguaci -
- Araguaci -
-
- - bmcgonag -
- Brian McGonagill -
-
- - vlad-timofeev -
- Vlad Timofeev -
-
- - helixzz -
- HeliXZz -
-
- - patvdv -
- Patrick Van Der Veken -
-
- - plgonzalezrx8 -
- Pedro Gonzalez -
-
- - mryesiller -
- Göksel Yeşiller -
-
- - allesauseinerhand -
- Allesauseinerhand -
-
- - forwardemail -
- Forward Email - Open-source & Privacy-focused Email Service (2023) -
-
- - lamtrinhdev -
- LamTrinh.Dev -
-
- - Bastii717 -
- Bastii717 -
-
- - getumbrel -
- Umbrel -
-
- - M2TD -
- M2TD -
-
- - frankdez93 -
- Frankdez93 -
-
- - terminaltrove -
- Terminal Trove -
-
- - NixyJuppie -
- Nixy -
-
- - nrvo -
- Nrvo -
-
+ + github +
+ GitHub +
+
+ + koconder +
+ Vincent Koc +
+
+ + Admonstrator +
+ Aaron Viehl +
+
+ + tbjers +
+ Torgny Bjers +
+
+ + AnandChowdhary +
+ Anand Chowdhary +
+
+ + shrippen +
+ Shrippen +
+
+ + bile0026 +
+ Zach Biles +
+
+ + UlisesGascon +
+ Ulises Gascón +
+
+ + digitalarche +
+ Digital Archeology +
+
+ + InDieTasten +
+ InDieTasten +
+
+ + araguaci +
+ Araguaci +
+
+ + bmcgonag +
+ Brian McGonagill +
+
+ + vlad-tim +
+ Vlad +
+
+ + helixzz +
+ HeliXZz +
+
+ + patvdv +
+ Patrick Van Der Veken +
+
+ + plgonzalezrx8 +
+ Pedro Gonzalez +
+
+ + mryesiller +
+ Göksel Yeşiller +
+
+ + forwardemail +
+ Forward Email - Open-source & Privacy-focused Email Service (2023) +
+
+ + Bastii717 +
+ Bastii717 +
+
+ + getumbrel +
+ Umbrel +
+
+ + M2TD +
+ M2TD +
+
+ + frankdez93 +
+ Frankdez93 +
+
+ + terminaltrove +
+ Terminal Trove +
+
+ + nrvo +
+ Nrvo +
+
diff --git a/.github/workflows/credits.yml b/.github/workflows/credits.yml index 0259921..0056930 100644 --- a/.github/workflows/credits.yml +++ b/.github/workflows/credits.yml @@ -12,9 +12,9 @@ jobs: name: Inserts Sponsors 💓 steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Updates readme with sponsors - uses: JamesIves/github-sponsors-readme-action@1.0.5 + uses: JamesIves/github-sponsors-readme-action@v1 with: token: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} file: .github/README.md @@ -25,7 +25,7 @@ jobs: name: Inserts Contributors 💓 steps: - name: Updates readme with contributors - uses: akhilmhdh/contributors-readme-action@v2.3.4 + uses: akhilmhdh/contributors-readme-action@v2.3.10 env: GITHUB_TOKEN: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} with: diff --git a/.github/workflows/deploy-aws.yml b/.github/workflows/deploy-aws.yml index 3f53ab0..971858a 100644 --- a/.github/workflows/deploy-aws.yml +++ b/.github/workflows/deploy-aws.yml @@ -19,15 +19,15 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 16 - name: Cache node_modules - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} @@ -35,7 +35,7 @@ jobs: ${{ runner.os }}-yarn- - name: Create GitHub deployment for API - uses: chrnorm/deployment-action@releases/v1 + uses: chrnorm/deployment-action@releases/v2 id: deployment_api with: token: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} @@ -56,7 +56,7 @@ jobs: - name: Update GitHub deployment status (API) if: always() - uses: chrnorm/deployment-status@releases/v1 + uses: chrnorm/deployment-status@v2 with: token: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} state: "${{ job.status }}" @@ -68,15 +68,15 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v1 + uses: actions/setup-node@v4 with: node-version: 16 - name: Cache node_modules - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: node_modules key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} @@ -84,7 +84,7 @@ jobs: ${{ runner.os }}-yarn- - name: Create GitHub deployment for Frontend - uses: chrnorm/deployment-action@releases/v1 + uses: chrnorm/deployment-action@v2 id: deployment_frontend with: token: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} @@ -97,7 +97,7 @@ jobs: yarn build - name: Setup AWS - uses: aws-actions/configure-aws-credentials@v1 + uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -109,7 +109,7 @@ jobs: run: aws s3 sync ./build/ s3://$AWS_S3_BUCKET/ --delete - name: Invalidate CloudFront cache - uses: chetan/invalidate-cloudfront-action@v2.4 + uses: chetan/invalidate-cloudfront-action@v2 env: DISTRIBUTION: E30XKAM2TG9FD8 PATHS: '/*' @@ -119,7 +119,7 @@ jobs: - name: Update GitHub deployment status (Frontend) if: always() - uses: chrnorm/deployment-status@releases/v1 + uses: chrnorm/deployment-status@v2 with: token: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} state: "${{ job.status }}" diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index f335f59..53dcead 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -23,14 +23,14 @@ jobs: docker: runs-on: ubuntu-latest steps: - - name: Checkout + - name: Checkout 🛎️ uses: actions/checkout@v2 - - name: Extract tag name + - name: Extract tag name 🏷️ shell: bash run: echo "GIT_TAG=$(echo ${GITHUB_REF#refs/tags/} | sed 's/\//_/g')" >> $GITHUB_ENV - - name: Compute tags + - name: Compute tags 🔖 id: compute-tags run: | if [[ "${{ github.ref }}" == "refs/heads/master" ]]; then @@ -41,27 +41,27 @@ jobs: echo "DOCKERHUB_TAG=${DOCKERHUB_REGISTRY}/${DOCKER_USER}/${IMAGE_NAME}:${GIT_TAG}" >> $GITHUB_ENV fi - - name: Set up QEMU + - name: Set up QEMU 🐧 uses: docker/setup-qemu-action@v1 - - name: Set up Docker Buildx + - name: Set up Docker Buildx 🐳 uses: docker/setup-buildx-action@v1 - - name: Login to GitHub Container Registry + - name: Login to GitHub Container Registry 🔑 uses: docker/login-action@v1 with: registry: ${{ env.GHCR_REGISTRY }} username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Login to DockerHub + - name: Login to DockerHub 🔑 uses: docker/login-action@v1 with: registry: ${{ env.DOCKERHUB_REGISTRY }} username: ${{ env.DOCKER_USER }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - - name: Build and push Docker images + - name: Build and push Docker images 🛠️ uses: docker/build-push-action@v2 with: context: . diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 44c11f4..5bf3c37 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -8,7 +8,7 @@ jobs: codeberg: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: { fetch-depth: 0 } - uses: pixta-dev/repository-mirroring-action@v1 with: diff --git a/api/firewall.js b/api/firewall.js index 3588c33..bc46ba6 100644 --- a/api/firewall.js +++ b/api/firewall.js @@ -91,6 +91,14 @@ const firewallHandler = async (url) => { return hasWaf('IBM WebSphere DataPower'); } + if (headers['server'] && headers['server'].includes('QRATOR')) { + return hasWaf('QRATOR WAF'); + } + + if (headers['server'] && headers['server'].includes('ddos-guard')) { + return hasWaf('DDoS-Guard WAF'); + } + return { hasWaf: false, } diff --git a/api/ports.js b/api/ports.js index c302293..6cef48d 100644 --- a/api/ports.js +++ b/api/ports.js @@ -72,7 +72,11 @@ const portsHandler = async (url, event, context) => { if(timeoutReached){ return errorResponse('The function timed out before completing.'); } - + + // Sort openPorts and failedPorts before returning + openPorts.sort((a, b) => a - b); + failedPorts.sort((a, b) => a - b); + return { openPorts, failedPorts }; }; diff --git a/src/web-check-live/components/misc/AdditionalResources.tsx b/src/web-check-live/components/misc/AdditionalResources.tsx index 8f80072..d75f187 100644 --- a/src/web-check-live/components/misc/AdditionalResources.tsx +++ b/src/web-check-live/components/misc/AdditionalResources.tsx @@ -93,13 +93,14 @@ const resources = [ link: 'https://ssllabs.com/ssltest/analyze.html', icon: 'https://i.ibb.co/6bVL8JK/Qualys-ssl-labs.png', description: 'Analyzes the SSL configuration of a server and grades it', + searchLink: 'https://www.ssllabs.com/ssltest/analyze.html?d={URL}', }, { title: 'Virus Total', link: 'https://virustotal.com', icon: 'https://i.ibb.co/dWFz0RC/Virustotal.png', description: 'Checks a URL against multiple antivirus engines', - searchLink: 'https://www.virustotal.com/gui/domain/{URL}', + searchLink: 'https://www.virustotal.com/gui/search/{URL_ENCODED}', }, { title: 'Shodan', @@ -120,6 +121,7 @@ const resources = [ link: 'https://urlscan.io/', icon: 'https://i.ibb.co/cYXt8SH/Url-scan.png', description: 'Scans a URL and provides information about the page', + searchLink: 'https://urlscan.io/search/#{URL}', }, { title: 'Sucuri SiteCheck', @@ -133,21 +135,21 @@ const resources = [ link: 'https://whois.domaintools.com/', icon: 'https://i.ibb.co/zJfCKjM/Domain-tools.png', description: 'Run a WhoIs lookup on a domain', - searchLink: 'https://whois.domaintools.com/{URL}', + searchLink: 'https://whois.domaintools.com/{DOMAIN}', }, { title: 'NS Lookup', link: 'https://nslookup.io/', icon: 'https://i.ibb.co/BLSWvBv/Ns-lookup.png', description: 'View DNS records for a domain', - searchLink: 'https://www.nslookup.io/domains/{URL}/dns-records/', + searchLink: 'https://www.nslookup.io/domains/{DOMAIN}/dns-records/', }, { title: 'DNS Checker', link: 'https://dnschecker.org/', icon: 'https://i.ibb.co/gyKtgZ1/Dns-checker.webp', description: 'Check global DNS propagation across multiple servers', - searchLink: 'https://dnschecker.org/#A/{URL}', + searchLink: 'https://dnschecker.org/#A/{DOMAIN}', }, { title: 'Censys', @@ -175,13 +177,13 @@ const resources = [ link: 'https://dnsdumpster.com/', icon: 'https://i.ibb.co/DtQ2QXP/Trash-can-regular.png', description: 'DNS recon tool, to map out a domain from it\'s DNS records', - searchLink: '', }, { title: 'BGP Tools', link: 'https://bgp.tools/', icon: 'https://i.ibb.co/zhcSnmh/Bgp-tools.png', description: 'View realtime BGP data for any ASN, Prefix or DNS', + searchLink: 'https://bgp.tools/dns/{URL}', }, { title: 'Similar Web', @@ -211,10 +213,44 @@ const resources = [ description: 'Assesses website security posture by analyzing various security headers and practices', searchLink: 'https://observatory.mozilla.org/analyze/{URL}', }, + { + title: 'AbuseIPDB', + link: 'https://abuseipdb.com/', + icon: 'https://i.ibb.co/KLZncxw/abuseipdb.png', + description: 'Checks a website against Zscaler\'s dynamic risk scoring engine', + searchLink: 'https://www.abuseipdb.com/check?query={DOMAIN}', + }, + { + title: 'IBM X-Force Exchange', + link: 'https://exchange.xforce.ibmcloud.com/', + icon: 'https://i.ibb.co/tsTsCV5/x-force.png', + description: 'View shared human and machine generated threat intelligence', + searchLink: 'https://exchange.xforce.ibmcloud.com/url/{URL_ENCODED}', + }, + { + title: 'URLVoid', + link: 'https://urlvoid.com/', + icon: 'https://i.ibb.co/0ZDjCDz/urlvoid-icon.png', + description: 'Checks a website across 30+ blocklist engines and website reputation services', + searchLink: 'https://urlvoid.com/scan/{DOMAIN}', + }, + { + title: 'URLhaus', + link: 'https://urlhaus.abuse.ch/', + icon: 'https://i.ibb.co/j3QwrT8/urlhaus-logo.png', + description: 'Checks if the site is in URLhaus\'s malware URL exchange', + searchLink: 'https://urlhaus.abuse.ch/browse.php?search={URL_ENCODED}', + }, + { + title: 'ANY.RUN', + link: 'https://any.run/', + icon: 'https://i.ibb.co/6nLw2MC/anyrun-icon.png', + description: 'An interactive malware and web sandbox', + }, ]; const makeLink = (resource: any, scanUrl: string | undefined): string => { - return (scanUrl && resource.searchLink) ? resource.searchLink.replaceAll('{URL}', scanUrl.replace('https://', '')) : resource.link; + return (scanUrl && resource.searchLink) ? resource.searchLink.replaceAll('{URL}', scanUrl.replace(/(https?:\/\/)?/i, '')).replaceAll('{URL_ENCODED}', encodeURIComponent(scanUrl.replace(/(https?:\/\/)?/i, '')).replace(/['\.*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`)).replaceAll('{DOMAIN}', scanUrl.replace(/(https?:\/\/)?(www.)?/i, '').replace(/(\/.*)/i, '')) : resource.link; }; const AdditionalResources = (props: { url?: string }): JSX.Element => {