이 게시판은 g5guide.github.io(그누보드5 비공식 가이드)를 포크하여 옮겨온 게시판입니다.

그누보드5(GNUBOARD5)는 국내에서 널리 쓰이는 오픈소스 게시판/CMS 엔진이며, 원본 가이드는 "개발사가 안 만들어서 사용자가 직접 만드는 그누보드 안내서"라는 슬로건으로 커뮤니티가 직접 만들어 온 문서입니다.

아래 카테고리(그누보드 / 스킨 만들기 / 테마 만들기 / 개발자 가이드 / 플러그인 만들기)를 눌러 원하는 섹션의 글만 모아볼 수 있습니다.

개발자 가이드

SQL Injection

그누보드는 PHP의 MySQL/MySQLi API를 사용하고 있으며, Prepared Statement를 사용하지 않는다. 오염된 전역변수 문제가 더해져 사용자 입력 변수와 전역변수의 데이터에 모두 위험성이 존재하며, SQL 질의문을 문자열에 변수를 직접 조합하므로 SQL 인젝션 공격에 취약하다.

그누보드의 코드에서는 보안취약점 제보로 패치되고 있지만, 서드파티가 제작한 기능은 이러한 보안취약점이 알려지거나 제보되지 않으므로 좀 더 취약할 수 있다. 스킨 등 확장기능을 개발할 때 SQL Injection에 항상 주의하여 질의문을 사용해야 한다.

MySQLi 바인딩 사용하기

MySQLi API에서 바인딩을 사용할 수 있지만 그누보드에서는 이를 사용하지 않으며, 개발자가 사용 가능한 헬퍼를 제공하지 않으므로 그누보드에서 자동 연결한 DB 커넥션으로 mysqli_prepare() 함수를 사용할 수 있다.

// $connect_db 전역변수를 사용
$stmt = mysqli_prepare(
    $connect_db,
    'SELECT * FROM `g5_member` WHERE `mb_id` = ?'
);
$stmt->bind_param('s', $memberId);

$memberId = 'admin';
$stmt->execute();

원문: https://g5guide.github.io/developers/sql_injection.html (g5guide, CC BY-SA 4.0)

댓글목록

등록된 댓글이 없습니다.

전체 49
번호 제목 글쓴이 날짜 조회