2025-07-21 주간 URL 모음
- GitHub - rishubil/bodiless-browser: If there's a Headless Browser, shouldn't someone make a Bodiless Browser too?
- 요약
- Bodiless Browser라는 헤드리스 브라우저와 반대 개념의 웹 브라우저 프로젝트
- URL 입력 시 HTTP 상태 코드(200, 404, 500 등), 페이지 제목, 응답 시간, 컨텐츠 크기만 표시하는 단순한 기능 제공
- 렌더링, JavaScript 실행, 복잡한 기능 없음 - 최소한의 정보만 제공
- 개발자가 심심해서 만든 프로젝트로, 단순함이 매력이라고 설명
- Tauri 기반으로 개발되어 npm install, npm run tauri dev, npm run tauri build 명령어로 실행 가능
- 릴리스 페이지에서 인스톨러를 다운로드하여 바로 사용 가능
- 기능 추가는 가능하지만 단순함을 유지하는 것이 핵심이라고 강조
- MIT 라이선스로 오픈소스 프로젝트이며 기여 환영
- Avoiding the Top 10 NGINX Configuration Mistakes
- 요약
- NGINX 사용자들은 경험이 풍부한 엔지니어들조차 동일한 설정 실수를 반복적으로 저지르며, 가장 빈번한 10가지 오류가 식별되고 해결책이 제공됨
- 워커 연결과 파일 디스크립터 불일치: 기본
worker_connections
(512)는 대부분의 배포에 비해 너무 작지만, 중요한 실수는 worker_rlimit_nofile
을 최소한 worker_connections
값의 두 배로 설정하지 않는 것인데, 각 연결마다 여러 파일 디스크립터가 필요하기 때문 - 잘못된
error_log off
사용: access_log
와 달리 error_log
지시어는 off
매개변수를 받지 않으며 대신 "off"라는 이름의 파일을 생성함; 비활성화하는 올바른 방법은 error_log /dev/null emerg;
- 업스트림 서버에 대한 keepalive 연결 누락: 각 요청마다 새로운 연결을 여는 것은 비효율적이고 소스 포트를 고갈시킬 수 있음; 해결책은
upstream{}
블록에서 keepalive
지시어를 사용하고 proxy_http_version 1.1
과 proxy_set_header "Connection" "";
을 설정하는 것 - 지시어 상속 오해:
add_header
와 proxy_set_header
같은 배열 지시어는 하위 컨텍스트에서 부모 값에 추가되는 것이 아니라 완전히 재정의하므로, 하위 블록에서 부모 헤더를 수동으로 재정의해야 함 - 불필요한
proxy_buffering
비활성화: proxy_buffering off
설정은 성능을 저하시키고 속도 제한/캐싱을 중단시킴; 롱 폴링과 같은 특정 사용 사례에만 비활성화해야 함 - 문제가 있는
if
지시어 사용: if
지시어는 location{}
블록에서 위험하며 세그먼테이션 폴트를 일으킬 수 있음; 더 안전한 대안으로는 map{}
블록을 사용하거나 if{}
내에서 return
/rewrite
를 사용하는 것 - 업스트림당 여러 헬스 체크: 동일한 업스트림에 대해 모든
server{}
블록에서 health_check
를 정의하는 것은 불필요한 부하를 생성함; upstream{}
블록당 하나의 헬스 체크로 충분함 - 보안되지 않은 메트릭 엔드포인트:
stub_status
와 api
엔드포인트는 민감한 정보를 노출함; HTTP Basic 인증(auth_basic
), IP 제한(allow
/deny
), 또는 satisfy any
를 사용한 조합으로 보호해야 함 - 동일한 /24 CIDR에서
ip_hash
사용: 모든 트래픽이 동일한 네트워크 세그먼트에서 오는 경우, ip_hash
는 처음 세 옥텟만 사용하므로 실패함; 해결책은 전체 IP 해싱을 위해 hash $binary_remote_addr consistent
를 사용하는 것
- Hackers exploit a blind spot by hiding malware inside DNS records
- 요약
- 해커들이 DNS 레코드 내부에 악성코드를 숨기고 있으며, 대부분의 보안 방어 시스템이 도달할 수 없는 감시가 거의 되지 않는 영역을 악용하고 있습니다
- 이 기법을 통해 악성 스크립트는 의심스러운 사이트나 이메일 첨부파일에서 다운로드하지 않고도 바이너리 파일을 가져올 수 있으며, 이러한 파일들은 일반적으로 백신 소프트웨어에 의해 격리됩니다
- DNS 트래픽은 보안 도구에 있어 중요한 사각지대를 나타내는데, 웹과 이메일 트래픽은 DNS 조회보다 훨씬 더 면밀한 감시를 받기 때문입니다
- DomainTools 연구진은 이 방법이 컴퓨터 정상 기능을 방해하는 성가신 악성코드인 Joke Screenmate의 악성 바이너리를 호스팅하는 데 사용되고 있음을 발견했습니다
- 악성코드 파일은 컴팩트한 문자 표현을 위해 바이너리에서 16진수 형식(0-9 숫자와 A-F 문자 사용)으로 변환되었습니다
- 16진수 데이터는 수백 개의 청크로 나뉘어져, 서로 다른 서브도메인의 DNS TXT 레코드에 저장되었습니다
- TXT 레코드는 임의의 텍스트를 저장할 수 있으며, Google Workspace와 같은 서비스 설정 시 사이트 소유권 확인을 위해 일반적으로 사용됩니다
- 공격자들은 무해해 보이는 DNS 요청을 통해 청크들을 검색하고, 이를 재조립한 후 실행을 위해 바이너리 형식으로 다시 변환할 수 있습니다
- 이 기법은 암호화된 DNS 조회 방법(DOH 및 DOT)의 채택이 더 널리 확산됨에 따라 탐지가 더욱 어려워집니다
- Gaslight-driven development
- 요약
- "Gaslight-driven development"라는 새로운 개발 패러다임이 등장함 - LLM이 API 설계에 대한 의견을 제시하고, 개발자들이 이에 맞춰 코드를 수정하는 현상
- 컴퓨터 사용자들은 이미 무의미한 작업들(계정 생성, 이메일 확인, 캡차 해결 등)을 기계가 시키는 대로 수행하며 기계에 복종하고 있음
- 2025년 9월까지 90%의 코드가 AI에 의해 작성될 예정이어서, 개발자들은 LLM의 요구사항을 따를 수밖에 없는 상황
- 실제 사례들:
- Soundslice은 ChatGPT가 존재한다고 계속 말하는 기능을 실제로 추가함
- Instant는 LLM이 계속
tx.create
를 사용하려 해서 기존 tx.update
와 별도로 tx.create
를 추가함
- 이런 접근법의 긍정적 측면: LLM이 수백만 개의 다른 API를 학습해서 가장 직관적이고 개발자가 먼저 생각할 법한 것을 제안함
- 독특한 테스팅 도구 역할: 개발자들은 API를 잘못 사용해도 자신을 탓하고 문서를 읽어 수정하지만, ChatGPT를 통해서는 "초보자 관점"을 언제든 체험할 수 있음
- 한계점: 새롭고 독창적인 것을 시도할 때는 LLM이 이해하지 못함
- 대부분의 경우 API에서 영리함보다는 가장 명백한 방법이 최선일 수 있다는 관점 제시
- AI가 도구를 사용하는 것을 넘어서 도구가 어떻게 만들어져야 하는지에 대한 의견을 갖게 됨
- AI는 정중하게 요청하는 대신 모든 사람을 가스라이팅하여 원래 그랬던 것처럼 착각하게 만드는 새로운 시대가 도래함