채택완료

bbs/write_update.php 파일 질문있습니다.

bbs/write_update.php 파일에 아래와 같은 부분이 있는데요

 

Copy
$wr_subject = '';
if (isset($_POST['wr_subject'])) {
    $wr_subject = substr(trim($_POST['wr_subject']),0,255);
    $wr_subject = preg_replace("#[\\\]+$#", "", $wr_subject);
}
if ($wr_subject == '') {
    $msg[] = '<strong>제목</strong>을 입력하세요.';
}

$wr_content = '';
if (isset($_POST['wr_content'])) {
    $wr_content = substr(trim($_POST['wr_content']),0,65536);
    $wr_content = preg_replace("#[\\\]+$#", "", $wr_content);
}
if ($wr_content == '') {
    $msg[] = '<strong>내용</strong>을 입력하세요.';
}

 

$wr_subject = preg_replace("#[\\\]+$#", "", $wr_subject);

$wr_content = preg_replace("#[\\\]+$#", "", $wr_content);

이거 두 부분은 무슨 의미로 사용되는 것인가요? 용도가 무엇인가요?

답변 2개 / 댓글 4개

채택된 답변
+20 포인트

제목과 내용에서 특수문자들을 걸러내는 구문입니다. 

정규표현식을 찾아보시면, 이해하는데 도움이 될 것 같습니다. 

 

답변에 대한 댓글 4개

답변감사합니다.
특수문자를 제거하고 있다는 정도는 이해가 갑니다.

www/common.lib.php 파일에서
[code]
// 파일명에서 특수문자 제거
function get_safe_filename($name)
{
$pattern = '/["\'<>=#&!%\\\\(\)\*\+\?]/';
$name = preg_replace($pattern, '', $name);

return $name;
}
[/code]

이렇게 전체 특수문자를 제거하는게 있는데요
그렇다면 $wr_subject = preg_replace("#[\\\]+$#", "", $wr_subject);
여기 부분에서는 무슨 특수문자를 제거 하는 건가요?
특히 내용 부분에서는 특수문자가 들어가면 안되는 건가요?
보통 내용 부분에는 여러가지 긴~ 문장을 사용하니 특수문자가 들어가는게 정상이 아닐까해서요
그리고 그 특수문자를 제거하는 이유가 궁금한겁니다.
주석에도 써있듯이 common.lib 파일에선 파일명의 특수문자를 제거 하는거구요.



제목과 내용에서 저런 정규식이 써져있는건 $나 #이 php에서 사용되는 특수문자이기 때문입니다.



저게 들어가면 변수명으로 오인하기 때문에 오동작이 일어날 수도 있고 보안에 문제가 생길 수도 있어서 제거하게 되어있는 것 같습니다.
볼피드님 감사합니다 정확하게 이해했습니다.
본문에 있는 정규식 구문만으로 해석해 봤을 때,
역슬래시(\) 를 제거하기 위한 구문으로 보입니다.

sql 구문에 역슬래시가 들어가면,
오류가 발생하거나 인젝션 공격이 될 수도 있습니다.

답변을 작성하려면 로그인이 필요합니다.