← WhiteHat Code샘플 리포트 목록
샘플 리포트 — 공개 오픈소스 저장소를 실제로 스캔한 결과입니다

gnuboard/gnuboard5

@ master

gnuboard/gnuboard5@ master300 / 1663 파일 스캔 (일부)
위험

치명적 취약점이 발견되었습니다 — 즉시 조치가 필요합니다.

47건 — CRITICAL 1건 · HIGH 14건 · MEDIUM 32건

주요 발견 유형

weak hash password31
sql injection7
eval dynamic3
SQL Injection1
secret generic assignment1
Missing Input Validation1

3개 유형

프로젝트 구조

0개 엔드포인트 · 자동 추출
시퀀스 다이어그램 (Mermaid)
sequenceDiagram
  actor User
  participant API
  User->>API: HTTP 요청
  API-->>User: 응답
유스케이스 다이어그램 (Mermaid)
flowchart LR
  A0["👤 User"]
  A1["👤 Admin"]
  A0 --> U0(["코드 분석"])

내 코드 이슈 (47건)

직접 작성/수정한 코드에서 발견된 이슈입니다 — 코드 수정으로 해결합니다.

CRITICAL1
#1CRITICALllmllm:SQL Injectioninstall/install_db.php:93

관리자 입력값($admin_id, $admin_pass, $admin_name, $admin_email)이 SQL 쿼리에 직접 삽입됩니다. $admin_name과 $admin_email은 sql_real_escape_string으로 escape되지만, $admin_id와 $admin_pass는 escape되지 않은 채 INSERT 쿼리에 사용됩니다(라인 93 이후의 미완성 쿼리). 이는 SQL 인젝션을 야기할 수 있습니다.

(LLM review)

모든 사용자 입력값에 대해 sql_real_escape_string을 적용하거나, 미리 준비된 명령문(prepared statements)을 사용하세요. $admin_id와 $admin_pass도 라인 87-88과 같이 escape 처리하세요.

HIGH14
#2HIGHinjectioneval-dynamicadm/admin.head.php:100

동적 코드 실행(eval / new Function).

//submenu = eval(name+".style");

상수가 아닌 입력에는 eval/Function을 사용하지 마세요 — 코드 인젝션을 허용합니다.

#3HIGHinjectionsql-injectionadm/config_form.php:1693

SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.

$("select[name=" + key + "]").val(data[key]);

문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.

#4HIGHinjectionsql-injectionadm/shop_admin/configform.php:1950

SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.

$("select[name="+key+"]").val(data[key]);

문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.

#5HIGHinjectionsql-injectionadm/sms_admin/form_group.php:39

SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.

location.href = 'form_group_update.php?w='+ fg_no +'&fg_no=' + fg_no;

문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.

#6HIGHinjectionsql-injectionadm/sms_admin/form_list.php:69

SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.

location.href = "./form_update.php?w=d&fo_no=" + fo_no + "&page=<?php echo $page?>&fg_no=<?php echo $fg_no?>&st=<?php echo get_text($st); ?>&sv=<?php echo get_text($sv); ?>&token=<?php echo $token; ?>

문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.

#7HIGHinjectionsql-injectionadm/sms_admin/form_list.php:107

SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.

location.href = "./form_multi_update.php?w=" + sel.value + "&ck_no=" + ck_no;

문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.

#8HIGHinjectioneval-dynamicadm/sms_admin/install.php:51

동적 코드 실행(eval / new Function).

eval("\$file = \"$file\";");

상수가 아닌 입력에는 eval/Function을 사용하지 마세요 — 코드 인젝션을 허용합니다.

#9HIGHinjectionsql-injectionadm/sms_admin/num_group.php:26

SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.

location.href = 'num_group_update.php?mw=d&bg_no=' + bg_no;

문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.

#10HIGHinjectionsql-injectionadm/sms_admin/num_group.php:45

SQL 문자열이 연결/보간으로 만들어지는 것으로 보입니다.

location.href = 'num_group_update.php?mw=empty&bg_no=' + bg_no;

문자열로 SQL을 조립하지 말고 파라미터화된 쿼리 또는 바인딩 파라미터를 지원하는 ORM을 사용하세요.

#11HIGHsecretsecret-generic-assignmentplugin/PHPMailer/get_oauth_token.php:30

리터럴 문자열에 하드코딩된 자격증명이 할당되어 있습니다.

$clientSecret = '***redacted***';

시크릿은 소스가 아닌 환경변수/시크릿 스토어에서 불러오세요. 실제 값이라면 폐기하세요.

#12HIGHinjectioneval-dynamicplugin/htmlpurifier/standalone/HTMLPurifier/ConfigSchema/InterchangeBuilder.php:182

동적 코드 실행(eval / new Function).

return eval('return array(' . $contents . ');');

상수가 아닌 입력에는 eval/Function을 사용하지 마세요 — 코드 인젝션을 허용합니다.

#13HIGHllmllm:Missing Input Validationinstall/install_db.php:36

관리자 비밀번호($admin_pass)에 대한 형식 검증이 없습니다. 이메일과 아이디는 검증되지만 비밀번호는 raw로 처리되므로 약한 비밀번호가 저장될 수 있습니다.

(LLM review)

비밀번호 강도 검증을 추가하세요(최소 길이, 복잡성 요구사항 등). 또한 비밀번호는 저장 전에 해싱되어야 합니다.

#14HIGHllmllm:Insecure Direct Object Reference (IDOR)lib/outlogin.lib.php:48

쿼리 문자열에 사용자 입력값이 직접 삽입됩니다: sql = " select count(*) as cnt from {$g5['auth_table']} where mb_id = '{$member['mb_id']}' ". $member['mb_id']가 검증 없이 사용되면 SQL 인젝션이 가능합니다.

(LLM review)

prepared statement를 사용하거나 사용자 입력값을 항상 escape 처리하세요. 또한 $member['mb_id']가 현재 로그인한 사용자의 ID인지 검증하세요.

#15HIGHllmllm:Arbitrary File Inclusionlib/outlogin.lib.php:57

사용자 제어 파라미터 $skin_dir을 기반으로 파일을 포함합니다(라인 57-58). 경로 검증이 부족하면 경로 탐색(path traversal) 공격으로 임의의 파일을 포함할 수 있습니다.

(LLM review)

$skin_dir 파라미터에 대해 화이트리스트 검증을 추가하세요. basename() 사용 및 '../' 패턴 검증으로 경로 탐색을 방지하세요.

MEDIUM32
#16MEDIUMcryptoweak-hash-passwordbbs/login_check.php:57

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$ckey = function_exists('get_email_cert_key') ? get_email_cert_key($mb_id, $mb['mb_datetime']) : md5($mb['mb_ip'].$mb['mb_datetime']);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#17MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyReq.php:43

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* 2. MD5 해쉬암호화 (수정하지 마세요) - BEGIN

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#18MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyReq.php:45

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* MD5 해쉬암호화는 거래 위변조를 막기위한 방법입니다.

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#19MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyReq.php:54

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* MD5 해쉬데이터 암호화 검증을 위해

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#20MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyReq.php:59

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$LGD_HASHDATA   = md5($LGD_MID.$LGD_BUYERSSN.$LGD_TIMESTAMP.$LGD_MERTKEY);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#21MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyReq.php:76

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$payReqMap['LGD_HASHDATA'] 				= $LGD_HASHDATA;      	           		// MD5 해쉬암호값

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#22MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyReq.php:102

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* 2. MD5 해쉬암호화 (수정하지 마세요) - END

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#23MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyRes.php:130

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$mb_dupinfo = md5($ci.$ci);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#24MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyRes.php:147

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$md5_cert_no = md5($cert_no);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#25MEDIUMcryptoweak-hash-passwordplugin/lgxpay/AuthOnlyRes.php:148

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$hash_data   = md5($user_name.$cert_type.$birth_day.$phone_no.$md5_cert_no);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#26MEDIUMcryptoweak-hash-passwordplugin/lgxpay/find_AuthOnlyRes.php:130

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$md5_ci = md5($ci.$ci);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#27MEDIUMcryptoweak-hash-passwordplugin/lgxpay/find_AuthOnlyRes.php:143

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$md5_cert_no = md5($cert_no);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#28MEDIUMcryptoweak-hash-passwordplugin/lgxpay/find_AuthOnlyRes.php:144

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

$hash_data   = md5($user_name.$cert_type.$birth_day.$phone_no.$md5_cert_no);

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#29MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:61

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* Needs to return the name of the Signature Method (ie HMAC-SHA1)

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#30MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:93

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#31MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:97

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

*   - Chapter 9.2 ("HMAC-SHA1")

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#32MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:101

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return "HMAC-SHA1";

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#33MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:116

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return base64_encode(hash_hmac('sha1', $base_string, $key, true));

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#34MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:154

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#35MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:159

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

*   - Chapter 9.3 ("RSA-SHA1")

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#36MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:163

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return "RSA-SHA1";

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#37MEDIUMcryptoweak-hash-passwordplugin/sns/twitter/twitteroauth/OAuth.php:477

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return md5($mt . $rand); // md5s look nicer than numbers

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#38MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:66

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* Needs to return the name of the Signature Method (ie HMAC-SHA1)

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#39MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:114

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104]

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#40MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:118

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

*   - Chapter 9.2 ("HMAC-SHA1")

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#41MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:122

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return "HMAC-SHA1";

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#42MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:137

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return base64_encode(hash_hmac('sha1', $base_string, $key, true));

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#43MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:175

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

* The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#44MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:180

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

*   - Chapter 9.3 ("RSA-SHA1")

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#45MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:184

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return "RSA-SHA1";

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#46MEDIUMcryptoweak-hash-passwordplugin/social/Hybrid/thirdparty/OAuth/OAuth.php:500

취약한 해시(MD5/SHA1) — 비밀번호/무결성 용도로 부적합합니다.

return md5($mt . $rand); // md5s look nicer than numbers

비밀번호에는 bcrypt/scrypt/argon2를, 무결성 검증에는 SHA-256 이상을 사용하세요.

#47MEDIUMllmllm:Sensitive Data Exposureinstall/install_db.php:29

데이터베이스 계정 정보(host, user, password, db)가 POST 파라미터로 전송되고 처리됩니다. HTTPS를 사용하지 않으면 평문으로 전송될 수 있습니다.

(LLM review)

설치 스크립트는 HTTPS를 강제하고, 설치 후 install_db.php 파일을 삭제하세요. 개발 환경에서는 DB 설정 정보를 환경 변수로 관리하세요.

내 저장소도 이렇게 스캔해 보세요

가입 없이 첫 스캔은 무료입니다.

지금 스캔하기