블로그

Go Hard

흔한 탁상공론 보안 조회 대신, 파이썬과 K-익명성으로 구현하는 패스워드 유출 확인 엔진

안녕하세요. 현업에서 백엔드 및 자동화 프로그램을 개발하고 있는 개발자입니다.최근 대규모 크리덴셜 스터핑(Credential Stuffing) 및 개인정보 유출 사고가 빈번하게 발생하면서, 내 계정의 안전 여부를 진단하는 토이 프로젝트나 서비스들이 많이 보입니다. 하지만 시중의 일부 초급 가이드나 대안들을 보면, 사용자가 입력한 비밀번호 원문이나 단순 해시값을 그대로 외부 API 서버에 HTTP 요청으로 쏘아 보내는 위험한 방식을 취하곤 합니다. 이는 전송 구간(In-Transit)에서 가로채기나 로그 유출이 발생할 수 있어 실제 프로덕션 환경에서는 절대 쓰이지 않는 '탁상공론형' 접근입니다.이에 구글이나 글로벌 빅테크 기업들이 보안 조회에 표준적으로 사용하는 'K-익명성(K-Anonymity)' 아키텍처를 도입하여, 로컬 메모리 내부에서 안전하게 대조 작업을 처리하는 진단 엔진을 파이썬으로 구현해 보았습니다. 🛠 핵심 메커니즘: SHA-1 해시 슬라이싱 (Hash Slicing)핵심은 사용자가 입력한 비밀번호의 SHA-1 해시값(40자리)을 온전하게 내보내지 않는 것입니다. 앞 5자리(Prefix)만 잘라서 외부 API 서버에 힌트로 던지면, 서버는 그 5자리로 시작하는 수만 개의 유출 서픽스(Suffix) 리스트를 덤프로 반환합니다. 진짜 대조 작업은 네트워크망이 아닌 내 컴퓨터의 로컬 메모리 안에서만 수행되므로 원천적으로 유출 가능성이 차단됩니다. 💻 핵심 구현 코드 (K-익명성 체크 로직)import hashlib import requests def check_password_leak(password: str) -> int: # 1. SHA-1 해시 변환 및 대문자 처리 sha1_hash = hashlib.sha1(password.encode("utf-8")).hexdigest().upper() # 2. K-익명성을 위한 해시 슬라이싱 (앞 5자리 Prefix, 뒤 35자리 Suffix) prefix = sha1_hash[:5] suffix = sha1_hash[5:] # 3. 앞 5자리 힌트만 외부 API 서버로 안전하게 전송 url = f"https://api.pwnedpasswords.com/range/{prefix}" response = requests.get(url, timeout=5) if response.status_code != 200: raise RuntimeError("API 서버 연동에 실패했습니다.") # 4. 서버가 반환한 수만 개의 찌꺼기 명단(Suffix:Count)을 로컬 메모리에서 대조 lines = response.text.splitlines() for line in lines: target_suffix, count = line.split(":") if target_suffix == suffix: return int(count) # 일치하는 유출 횟수 반환 return 0 # 유출 이력 없음현업 표준인 pyproject.toml 구조로 의존성을 설계하고, 사용자가 브라우저에서 편리하게 조율할 수 있도록 Streamlit 대시보드 UI를 얹어 패키징했습니다.전체 소스코드와 구체적인 UI 빌드 과정, 그리고 로컬 메모리 매칭 작업이 실제 어떤 무빙으로 안전하게 일치 판정을 내리는지 시각적으로 정리한 분석 내용은 아래 유튜브 콘텐츠를 참고해 주시면 감사하겠습니다. 👉유튜브 채널 '잡학다식 개발자' 영상 보기 : https://youtu.be/So49-1qf_ec👉GitHub 오픈소스 저장소 : https://github.com/gohard-lab/pwned_credential_checker 

파이썬개인정보유출보안프로그래밍K익명성비밀번호해킹패스워드유출조회HaveIBeenPwnedStreamlitSupabaseIT뉴스

Go Hard

Streamlit 앱 동면 방지 자동화와 실전 프로젝트 4종을 공유합니다

유튜브:https://youtu.be/eFfNM3tPuVA?si=ih03-JdCgJuft12J 안녕하세요, 파이썬 기반의 다양한 자동화 도구를 만드는 '잡학다식 개발자'입니다.무료 호스팅 서비스인 Streamlit Community Cloud를 사용하다 보면, 일정 시간 접속이 없을 때 앱이 자동으로 잠드는(Sleeping) 현상 때문에 정성껏 만든 서비스가 제때 보이지 않아 아쉬울 때가 많습니다. 이를 해결하기 위해 GitHub Actions를 활용한 'awake_alive' 워크플로우를 구축하여 공유하고자 합니다.단순히 핑(Ping)을 보내는 기능을 넘어, 현재 제가 운영 중인 중고차 데이터 분석, 자동차 유지비 시뮬레이터, 고전 게임 대시보드 등 성격이 다른 여러 앱을 한꺼번에 효율적으로 관리하도록 설계했습니다. [핵심 코드: GitHub Actions 기반 동면 방지 로직]# .github/workflows/awake_alive.yml name: Keep Streamlit Apps Awake on: schedule: - cron: '0 */12 * * *' # 12시간마다 주기적으로 실행 workflow_dispatch: # 수동 실행 가능 jobs: ping: runs-on: ubuntu-latest steps: - name: Send keep-alive pings to multiple apps run: | # 운영 중인 다양한 서비스 URL 리스트 urls=( "https://kcar-scraper.streamlit.app" "https://maintenance-battle.streamlit.app" "https://retro-game-center.streamlit.app" ) for url in "${urls[@]}"; do curl -s $url > /dev/null echo "Successfully pinged: $url" done 이번 콘텐츠에서는 위 자동화 코드뿐만 아니라, 오라클 클라우드에 직접 구축한 워드프레스 뉴스 블로그(gohard.pe.kr) 등 서로 다른 환경의 서비스들을 어떻게 연결하고 유지하는지에 대한 경험을 담았습니다.기술적인 상세 구현 방법과 전체 프로젝트 리스트는 아래 링크에서 확인하실 수 있습니다.✅ 잡학다식 개발자 블로그(Apex)https://gohard.pe.kr/🧔 내 차 유지비 관리(이건 여러분이 저의 콘텐츠를 보고 만들어 보시면 되요)https://cheiridrivingdashboard-cgpdkn...관련 영상 :    • 매월 줄줄 새는 내 차 유지비, 완벽하게 통제하는 가장 쉬운 방법  🚗 내 차 vs 네 차! 유지비 배틀 시뮬레이터현실적인 차량 유지비를 바 차트로 한눈에 비교해 보세요.https://cheiridrivingdashboard-cgpdknof3nnvufwaeyzkhr.streamlit.app/🚦 스쿨존 과태료 시뮬레이터법규 위반 시 과태료 확인 및 전국 실시간 접속 히트맵 시각화.https://schoolzonefinesim.streamlit.app/🏎 F1 Race AnalyzerF1 공식 데이터를 기반으로 한 정교한 텔레메트리 및 랩 페이스 분석.https://f1-race-analyzer-9pbapphbkgmo6rguympwshf.streamlit.app/📊 K-Car 중고차 시세 분석 대시보드네트워크 인터셉션 기술을 활용한 현업 수준의 동적 크롤링 도구.https://kcarcrawler-5ryuwuw8izgjmqphppweyv.streamlit.app/ GitHub 저장소: https://github.com/gohard-lab실행 링크: 영상 설명란의 Google Colab 및 EXE 실행 파일을 확인해 주세요. (배포 파일은 보안 검수를 마쳤으므로 안심하고 사용하셔도 됩니다.)

파이썬StreamlitGitHubActions자동화중고차크롤링유지비시뮬레이터워드프레스오라클클라우드잡학다식개발자토이프로젝트

Go Hard

[토이 프로젝트] K카 중고차 동적 크롤링 및 Streamlit 대시보드 배포

🚀 서비스 실행 링크: https://youtu.be/HnL0wOqci7Q 안녕하세요.파이썬과 데이터 분석에 관심이 많은 '잡학다식 개발자'입니다. K카 중고차 데이터를 수집하여 감가율을 시각화하는 대시보드 프로젝트를 진행하며 겪은,교과서적 이론과 실제 배포 환경의 간극에 대해 공유하고자 합니다. 보통 입문 강의에서는 requests와 BeautifulSoup을 이용한 정적 스크래핑을 배우지만,실제 상용 웹사이트는 동적 렌더링과 보안으로 겹겹이 막혀 있습니다. 이를 해결하기 위해 Playwright를 도입했습니다. 또한 구형 requirements.txt 대신요즘 파이썬 생태계 표준인 pyproject.toml을 도입하여 패키지 의존성을 명확하게 관리했습니다. 특히 Streamlit Cloud 배포 시 리눅스 컨테이너의 샌드박스 제약으로 브라우저가 뻗어버리는 현상을아래와 같이 Headless 옵션으로 우회했습니다. Python# kcar_headless_scraper.py import os from playwright.sync_api import sync_playwright def fetch_car_prices(): # Streamlit Cloud 환경에서 Playwright용 브라우저 강제 설치 os.system("playwright install chromium") with sync_playwright() as playwright_instance: # 이론적인 일반 스크래핑과 달리, 실제 클라우드 서버 환경에서는 # 샌드박스 충돌 및 메모리 부족 현상으로 인한 에러가 발생합니다. # 이를 우회하기 위한 현업의 필수 headless 옵션 세팅입니다. browser_instance = playwright_instance.chromium.launch( headless=True, args=[ '--no-sandbox', '--disable-dev-shm-usage' ] ) # 보안이 적용된 동적 페이지 렌더링 대기 및 데이터 추출 page_instance = browser_instance.new_page() page_instance.goto("https://www.kcar.com") # ... (중략: 데이터 크롤링 로직) ... browser_instance.close() return []  파이썬 크롤러 배포를 공부하시는 분들께 도움이 되기를 바랍니다. 

웹 개발파이썬Python웹크롤링PlaywrightStreamlit토이프로젝트데이터분석

채널톡 아이콘