최근에 Broken Link(Dead Link)를 쉽게 찾기 위한 도구를 하나 만들었습니다. 제 블로그의 Broken Link를 찾기 위한 목적이였지만, 가볍게라도 한번 공유하는게 좋을 것 같아서 블로그 글로 작성해봅니다.
DeadFinder 입니다 :D
Broken Link
Broken Link는 Dead Link 로도 불리며 웹 페이지 내 연결이 불가능한 링크들을 의미합니다. 기본적으로는 a 태그의 href 부터 script src 등 여러 elements에서 호출되는 웹 링크들입니다.
<!-- Example -->
<a href="https://www.hahwul.com/useful-link/index">Useful Link</a>
<!--
$ http https://www.hahwul.com/useful-link/index --headers
HTTP/1.1 404 Not Found
Accept-Ranges: bytes
Access-Control-Allow-Origin: *
-->
이러한 Broken Link 는 SEO(Search Engine Optimization)에 악영향을 미치고, 연결된 도메인 등에 따라서 보안적인 문제를 일으킬 수도 있습니다.
사용자들은 링크를 클릭할 때 주소 뿐만 아니라 해당 페이지의 신뢰성도 고려하게 됩니다. 만약 Broken Link를 누군가 Takover한 경우 서비스의 신뢰도를 이용한 공격에 사용될 수 있습니다.
Deadfinder
deadfinder는 웹 페이지 내 링크 등을 식별하고 테스트하여 Broken Link를 찾아주는 도구입니다.
Installation
# Install with Gem
gem install deadfinder
# Run on Docker
docker pull ghcr.io/hahwul/deadfinder:latest
Usage
Modes
현재까지 크게 4가지의 모드를 지웝합니다. 각 모드의 역할은 아래와 같습니다.
Description | Example | |
---|---|---|
url | 단일 URL을 스캔합니다. | deadfinder url https://www.hahwul.com |
sitemap | Sitemap을 분석하여 다수의 URL들을 스캔합니다. | deadfinder sitemap https://www.hahwul.com/sitemap.xml |
file | List 형태의 파일을 읽어 다수의 URL들을 스캔합니다. | deadfinder file urls.txt |
pipe | STDIN으로 부터 입력받아 다수의 URL들을 스캔합니다. | cat urls.txt | deadfinder pipe |
Options
스캔 속도에 영향을 주는 -c
, -t
그리고 JSON Result로 처리하기 위한 -o
옵션을 지원합니다.
Options:
c, [--concurrency=N] # Set Concurrncy
# Default: 20
t, [--timeout=N] # Set HTTP Timeout
# Default: 10
o, [--output=OUTPUT] # Save JSON Result
Targets
현재는 앵커태그(a)와 script, link 태그 등을 기반으로 체크합니다. form이나 img는 추후에 추가할 예정이고, 많은 결과가 발생할 수도 있어서 옵셔널하게 줄 예정입니다.
Upcoming features
- Support Github Action
- Support Jekyll and Hugo
- Support Local Filesystem
- Add More Targets