50 || strlen($lookup_pw) > 100) { $lookup_error = '입력값이 너무 깁니다.'; } else { // SQL Injection 방지: mysqli_real_escape_string 사용 global $md; if (isset($md['connect']) && $md['connect'] instanceof mysqli) { $lookup_id_escaped = mysqli_real_escape_string($md['connect'], $lookup_id); } else { $lookup_id_escaped = addslashes($lookup_id); } // 1. 제보확인 ID 존재 여부 확인 (데이터베이스 처리 완료를 위해 약간의 지연) usleep(100000); // 0.1초 지연 $sql = "SELECT atcl_seq, confirm_pw_hash FROM md_ethics WHERE confirm_id = '" . $lookup_id_escaped . "'"; $confirm_data = sql_fetch($sql); if (!$confirm_data) { $lookup_error = '제보확인 ID가 존재하지 않습니다.'; } else { // 2. 비밀번호 확인 (여러 형식 지원) $stored_hash = $confirm_data['confirm_pw_hash']; $input_pw = $lookup_pw; // 다양한 비밀번호 형식 확인 $password_match = false; // 1. 평문 비교 if ($stored_hash === $input_pw) { $password_match = true; } // 2. MD5 해시 비교 elseif ($stored_hash === md5($input_pw)) { $password_match = true; } // 3. SHA1 해시 비교 elseif ($stored_hash === sha1($input_pw)) { $password_match = true; } if (!$password_match) { $lookup_error = '비밀번호가 일치하지 않습니다.'; } else { // 3. 신고정보 조회 - SQL Injection 방지 $atcl_seq = $confirm_data['atcl_seq']; // atcl_seq는 숫자여야 함 (검증) if (!is_numeric($atcl_seq) || $atcl_seq <= 0) { $lookup_error = '잘못된 접수번호입니다.'; } else { // 숫자 값이므로 직접 사용 가능 (추가 이스케이프는 불필요하지만 안전을 위해) $atcl_seq_escaped = intval($atcl_seq); $sql = "SELECT atcl_seq, ref_seq, ref_level, title, content, mb_name, ctel_no, email, gubun, course_fg, agree, reg_dt FROM md_board WHERE atcl_seq = " . $atcl_seq_escaped . " AND board_cd = 'ethic'"; $report_data = sql_fetch($sql); // 디버깅: 쿼리 결과 확인 if (!$report_data) { // 다른 조건으로도 검색해보기 $sql2 = "SELECT atcl_seq, ref_seq, ref_level, title, content, mb_name, ctel_no, email, gubun, course_fg, agree, reg_dt FROM md_board WHERE atcl_seq = " . $atcl_seq_escaped; $report_data2 = sql_fetch($sql2); if ($report_data2) { $report_data = $report_data2; } else { $lookup_error = '신고정보를 찾을 수 없습니다.'; } } if ($report_data) { // 4. 조회 결과 저장 $lookup_result = $report_data; // 5. 답변 게시물 조회 (QnA 방식: ref_seq가 같고 ref_level > 0인 게시물) // 원글인 경우 ref_seq는 atcl_seq와 같고, 답변인 경우 ref_seq는 원글의 atcl_seq $ref_seq = $report_data['ref_seq']; $ref_level = isset($report_data['ref_level']) ? intval($report_data['ref_level']) : 0; // 원글인 경우 (ref_level = 0), ref_seq는 atcl_seq와 같아야 함 if ($ref_level == 0) { $ref_seq = $report_data['atcl_seq']; } if (!empty($ref_seq) && is_numeric($ref_seq)) { $ref_seq_escaped = intval($ref_seq); $reply_sql = "SELECT atcl_seq, title, content, mb_name, reg_dt FROM md_board WHERE ref_seq = " . $ref_seq_escaped . " AND ref_level > 0 AND del_dt IS NULL ORDER BY ref_level ASC, atcl_seq ASC LIMIT 1"; $reply_data = sql_fetch($reply_sql); if ($reply_data) { $lookup_result['reply'] = $reply_data; } } // 민감한 정보는 에러 로그에 기록하지 않음 error_log("조회 결과 성공 - 접수번호: " . $atcl_seq_escaped); } } } } } } ?>
※ 사실에 근거하지 않은비방, 구체적이지 않은 익명제보, 개인사생활 관련사항은 별도안내 없이 종료 처리되오니 이 점 양지하여 주시기 바랍니다.
뇌물/금전거래/향응 수수
공금횡령 및
사리도모
회사정보 및
인력유출 행위
불공정거래
구성원 간 인격 존중 미흡
(성희롱/괴롭힘)
기타 부정사례
충남 당진시 시곡로 348(시곡동), ㈜미래엔서해에너지 정도경영팀
제보자의 보호는 실명 및 정확한 증거 제출의 경우를 원칙으로 하고 있습니다. 또한 제보자 및 관련 이해 관계자들에 대한 제보 정보도 철저히 보호 하겠습니다.