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
@@ -1056,207 +1069,184 @@ Huge thanks to these wonderful people, who sponsor me on GitHub, their support h
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 => {