안녕하세요? 허니입니다. 악성 파일 업로드 및 원격 실행 취약점에 대해서 알아보고 대응 방법에 대해 알아보도록 하겠습니다. 사이버 해킹에 대해 공부하시는 학생이나 연구원 분이 계시면 도움이 될 것이라 생각합니다.


웹 어플리케이션 서버 환경에서 악성 코드로 작성된 실행 가능한 확장자(*.php, *.asp, *.aspx, *.jsp등) 업로드 시 악성 코드가 실행되는 취약점이며, 이를 통해 서버 조작, DB정보 탈취, Backdoor 설치, 악성파일 업로드 등 다양한 공격을 수행할 수 있습니다.

 

 일반적인 대응방법
업로드 파일을 위한 디렉터리에는 실행 권한을 제거 해야 하며 업로드 된 파일 이름을 임의로 변경하여 저장해야 합니다. 업로드 된 파일의 절대경로를 노출 시키지 않아야 합니다. 첨부되는 파일의 확장자를 필터링 해야 하며, 웹 사이트에서 허용하는 파일 확장자를 제외한 나머지 모든 확장자에 대해서 차단해야 합니다. 첨부파일에 대한 검사는 반드시 Server side Script 에서 구현해야 합니다.

 

 개발 언어별 대응방법
- 보안코딩(ASP)

<%
Set Up = Server.CreateObject("SiteGalaxyUpload.Form")
Path1 = server.mappath(".") & "\upload\"

Fname = Up("file1")

if Fname <> "" then  // 파일 첨부가 되었으면
if Up("file1").Size > 10240 then  // 용량 제한
Response.Write "용량 초과"
Response.End
end if

if Up("file1").MimeType <> "image" then  // 이미지만 업로드 허용
Response.Write "이미지 파일이 아닙니다."
Response.End
end if

Filename=Mid(Fname,InstrRev(Fname,"\")+1)  // 파일이름부분 추출

// 파일이름에서 세미콜론(;)이 존재하는지 검사한다
if NOT(InStr(Filename,”;”) Then
response.write "<script>alert(‘업로드 금지 파일 입니다’);history.back()</script>"
response.End
End if

// 중복 시에 파일이름 부분을 변경하기 위해 분리를 한다
Farry=split(Filename,".")  // .을 기준으로 분리
preFname=Farry(0)  // 파일이름 앞부분
extFname=Farry(UBound(Farry))  // 파일이름의 마지막 확장자

// 파일이름의 마지막 확장자를 검사한다
if (NOT(extFname <> "jpg") or (extFname <> "hwp") or (extFname <> "pdf")) then
response.write " 업로드 금지 파일 입니다 "
response.End
End If

// 저장할 전체 path를 만든다, 파일이름을 만든다
Path2 = Path1 & Filename
saveFname=preFname & "." & extFname

Set fso = CreateObject("Scripting.FileSystemObject")
countNo = 0  // 파일 중복될경우 셋팅 값
fExist=0  // 같은 이름의 파일 존재 체크
Do until fExist = 1
If(fso.FileExists(Path2)) Then
countNo = countNo + 1
Path2 = Path1 & preFname & countNo & "." & extFname
saveFname=preFname & countNo & "." & extFname
else
fExist=1
End If
Loop

Up("file1").SaveAs(Path2)
response.write(saveFname & " 저장완료")
else
response.write("Error")
end if

Set Up = nothing
%>

 

- 보안코딩(PHP)

<?php
$uploaddir = ‘/var/www/uploads/”;

// 파일 사이즈가 0byte 보다 작거나 최대 업로드 사이즈보다 크면 업로드를 금지 시킨다.
If($_FILES[‘userfile’][‘name’])
If($_FILES[‘userfile’][‘size’] <= 0)  // 최대 업로드 사이즈 체크 삽입
print “파일 업로드 에러”;
exit;

// 파일 이름의 특수문자가 있을 경우 업로드를 금지 시킨다.
If (eregi(“[^a-z0-9\._\-]”, $_FILES[‘userfile’][‘name’]))
print “파일 이름의 특수문자 체크”;
exit;

// 파일명 중 “.”으로 구분되어 있는 문자열 모두 검사하여 허용되지 않는 문자열 변환
// Apache mod_mime Module취약점 보완
$filename = preg_replace('/\.(php|phtm|htm|cgi|pl|exe|jsp|asp|inc)/i','$0-x',
$_FILES[‘userfile’][‘name’]);

// 파일 확장자 중 제일 끝에 존재하는 확장자를 기준으로 재검사
$full_filename = explode(“.”, $filename);
$extension = $full_filename[sizeof($full_filename)-1];
$extension = strtolower($extension);
If (!( ereg($extension”,”hwp”) || ereg($extension”,”pdf”) || ereg($extension”,”jpg”)) )
print “업로드 금지 파일 입니다”;
exit;

$uploadfile = $uploaddir. $_FILES[‘userfile’][‘name’];
If (move_uploaded_file($_FILES[‘userfile’][‘tmp_name’], $uploadfile))
print “파일이 존재하고, 성공적으로 업로드 되었습니다.”;
print_r($_FILES);
Else
Print “파일 업로드 공격의 가능성이 있습니다! 디버깅 정보입니다:\n”;
print_r($_FILES);
?>

 

- 보안코딩(JSP)

<%@ page contentType=”text/html;charset=euc-kr” %>
<%@ page import=”com.oreilly.servlet.MultipartRequest,com.oreilly.servlet.multipart.DefaultFileRenamePolicy
, java.util.*”%>
<%
String savePath=”/var/www/uploads”;  // 업로드 디렉터리
Int sizeLimit = 5*1024*1024;  // 업로드 파일 사이즈 제한

try
MultipartRequest multi=new MultipartRequest(request, savePath, sizeLimit, “euc-kr”, new
DefaultFileRenamePolicy());
Enumeration formNames=multi.getFileNames();  // 폼의 이름 반환
String formName=(String)formNames.nextElement();
String fileName=multi.getFilesystemName(formName);  // 파일의 이름 얻기

String file_ext = fileName.substring(fileName.lastIndexOf(‘.’) + 1);
If(!( file_ext.equalsIgnoreCase(“hwp”) || file_ext.equalsIgnoreCase(“pdf”) || file_ext.equalsIgnoreCase(“jpg”)))
out.print(“업로드 금지 파일”);

If(fileName == null)
out.print(“파일 업로드 실패”);
else
fileName=new String(fileName.getBytes(“8859_1”), “euc-kr”);  // 한글인코딩
out.print(“File Name : “ + fileName);

catche(Exception e)


 

안녕하세요? 허니입니다. 불안전한 직접 객체 참조 취약점에 대해서 알아보고 대응 방법에 대해 알아보도록 하겠습니다. 사이버 해킹에 대해 공부하시는 학생이나 연구원 분이 계시면 도움이 될 것이라 생각합니다.


일반적으로 웹 애플리케이션은 HTTP 요청(또는 파일) 값을 통해 다음 동작을 결정하게 되는데 공격자는 URL, 쿼리 문자열, HTTP 헤더, 쿠키, HTML 폼 인자, HTML hidden 필드 등 모든 HTTP 요청을 조작할 수 있으며, 이를 통해 사이트의 보안 메커니즘을 우회하고자 시도할 수 있습니다. 흔히 발생하는 입력 값 변조 공격은 URL 강제 접속, 명령어 삽입, 크로스 사이트 스크립팅, 버퍼오버플로우, 포맷스트링 공격, SQL 구문 삽입, 쿠키 조작, hidden필드 조작 등으로 사용됩니다.

 

 일반적인 대응방법
파라미터 변조를 방지할 수 있는 가장 좋은 방법은 모든 파라미터에 대해 사용 전에 입력 값 검증을 수행하는 것이다. 모든 입력 값에 대해 중앙에서 집중적으로 처리하는 하나의 컴포넌트나 라이브러리를 사용하는 것이 가장 효과적입니다. 입력되는 모든 파라미터는 허용된 입력 값의 유형과 정확히 일치하는지에 대해 점검하여야 합니다. 특정한 악의적 파라미터나 공격 패턴(signature)만을 필터링 처리하는 방식은 효율적이지도 않고, 향후의 유지보수 작업을 어렵게 만듭니다. 다음과 같이 스팩 상에 허용된 값만을 받아들이는 "허용(Positive) 방식"을 사용하여 파라미터를 검증하여야 합니다.

 

 데이터 유형 (문자열, 정수형, 실수형 등)

 허용된 문자셋 (character set)

 최대 / 최소 길이

 Null 값의 허용 여부

 반드시 필요한 파라미터와 그렇지 않은 파라미터

 중복 허용 여부

 숫자의 범위

 타당한 것으로 지정된 값 (열거형 - enumeration 사용)

 타당한 것으로 지정된 패턴 (정규식 사용)

 

웹 애플리케이션 방화벽과 같은 새로운 종류의 보안 장비는 어느 정도 입력 값 검증 기능을 제공할 수 있습니다. 그러나 이런 장비를 효율적으로 사용하기 위해서는 사이트에서 사용되는 모든 파라미터들에 대해 어떤 값이 타당한 것인지 엄격하게 정의해 놓아야 합니다. 이는 곧 URL, 폼 데이터, 쿠키, 쿼리 문자열, HTML hidden 필드 등 모든 유형의 입력 값에 대해 적절히 보안하는 것을 뜻합니다.

 

 개발 언어별 대응방법
- 보안코딩(ASP)

<%
Size = Request.QueryString("font_size")' 사용자로부터 폰트의 크기 입력
Size = CInt(Size)' 입력되는 값을 정수로 형 변환
Response.Write "<HTML><TITLE>사용자 입력 값 검증</TITLE></HEAD>"
Response.Write "<BODY>"
Response.Write "<FONT size=" & Size ">글자 크기 조절</FONT>"

 

' ... 중략 ...

 

 

- 보안코딩(PHP)

<?PHP
@require_once "./inc/dbconn.inc";// DB 연결 헤더
$default_lang = "korea";// 기본값 설정

 

if(!file_exists($language."/head.html")) // 파일이 존재하는지 체크
if(eregi(":\/\/", $language)) $language = $default_lang;// URL이 포함되는지 체크
else // 파일이 없는 경우 기본값 설정
$language = $default_lang;

 

@require_once $language . "/head.html";// 각 국가 언어별 HTML 출력

$conn = @mysql_connect($SERVER, $USER, $PASSWD);


$query = "select count(*) from main_tbl";

 

// ... 중략 ...

 


- 보안코딩(JSP)

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.* " %>
<HTML><HEAD><TITLE> 사이트 접속 불가 </TITLE>
<META HTTP-EQUIV="Refresh" CONTENT="10;URL=http://victim.com/bye.html">
</HEAD>
<BODY>
<%
String user_agent = request.getHeader("USER-AGENT");

 

// HTTP HEADER 중 USER_AGENT를 변경 하여 크로스사이트 스크립트 공격하는 것을 차단
user_agent = user_agent.replaceAll("<","&lt;");// HTML tag가 있을 경우 제거
user_agent = user_agent.replaceAll(">","&gt;");

 

out.print("지금 사용하고 계신 ");
out.print(user_agent);
out.print(" 브라우져로는 사이트 접속이 불가능 합니다.");

 

%>
</BODY>
</HTML>

 

 

안녕하세요? 허니입니다. Hidden Field 조작 취약점에 대해서 알아보고 대응 방법에 대해 알아보도록 하겠습니다. 사이버 해킹에 대해 공부하시는 학생이나 연구원 분이 계시면 도움이 될 것이라 생각합니다.


Hidden Field 조작은 Form의 특정 Hidden Field의 인자를 조작하여 어플리케이션의 비정상적인 작동을 유도하는 공격 기법입니다. 이는 Form Hidden Field에 사용자 계정이나 비밀번호 또는 어플리케이션에서 중요한 의미를 가지는 데이터를 저장하고 이를 서버 측에서 신뢰하여 입력 값 검증을 수행하지 않기 때문에 발생되는 문제점입니다

 

 대응방법
Hidden Field를 이용해서 중요한 정보를 저장하는 것은 위험한 행위입니다. 중요한 정보에 대한 모든 처리는 서버 측에서 이루어질 수 있도록 어플리케이션을 설계하는 것이 바람직하며, 쇼핑 카트와 같이 사용자 측에 특정 정보가 저장되어야 한다면 Cookie를 이용하여 해당 제품의 ID만을 저장하여 가격을 처리할 때에는 서버 측에서 해당 제품의 ID를 이용하여 가격을 산출하도록 처리해야 합니다. 웹 브라우저에서 단순히 보이지 않는다고 사용자가 보지 못하는 것을 절대 아니란 사실을 잊어서는 안 됩니다. 이는 스크립트를 이용해서 오른쪽 마우스를 차단하거나 기타 여러 가지 조치를 수행한다고 해도 변함이 없다. 만약 스크립트를 이용해서 마우스 이벤트를 차단하거나 HTML 소스 보기를 차단했다면 공격자는 웹 프록시를 이용해서 해당 소스를 볼 수 있으며, 해당 이벤트를 처리하는 스크립트를 제거할 수도 있습니다.

 

안녕하세요? 허니입니다. XSS/CSRF 취약점에 대해서 알아보고 대응 방법에 대해 알아보도록 하겠습니다. 사이버 해킹에 대해 공부하시는 학생이나 연구원 분이 계시면 도움이 될 것이라 생각합니다.


어플리케이션이 적절하게 검증하거나 제한하지 않고 사용자가 제공한 데이터를 브라우저가 전송한 페이지에 포함시킬 때 발생합니다. 특정한 동작의 전체과정이 예측 가능한 웹 어플리케이션에서 발생한다. 브라우저는 세션 쿠키와 같은 자격 증명 정보들을 자동으로 전송하기 때문에 공격자는 정상적인 요청과 구별할 수 없는 변조된 요청을 포함한 악성 웹 페이지를 만들 수 있습니다.

 

 일반적인 대응방법
적절한 출력 인코딩을 이용해 사용자 입력은 항상 브라우저에서 실행될 수 있는 활성 콘텐츠가 아닌 텍스트로 취급하도록 합니다. 신뢰할 수 없는 데이터가 포함될 수 있는 HTML(body, attribute, 자바스크립트, CSS, URL) 기반 데이터 전체를 어플리케이션 내에서 제한 처리를 해야 합니다. 정규화 및 디코딩으로 입력에 특수 문자가 필요한 경우 입력을 허용하기 전에 가능한 인코딩 된 모든 입력을 디코딩 해 길이, 문자, 포맷, 데이터 관련 업무 역할을 검증하도록 해야 합니다. XSS/CSRF에 사용되는 script 문장에 존재한 특수 문자를 메타캐릭터로 변환 시킵니다.

 

- 메타캐릭터 변환

<  ---------  &lt
>  ---------  &gt
(  ---------  &#40
)  ---------  &#41
#  ---------  &#35
&  ---------  &#38


- Contents 구문 사용

contents = Server.HTMLEncode(Request("contents"))

 

- Replace 구문 사용

content = ConvertTohtml(content)
content = Replace(content,"'","''")
content = replace(content ,"&","&amp;")
content = replace(content ,">","&gt;")
content = replace(content ,"<","&lt;")

 

- XST 공격 대응 방법

[Apache]
 Apache의 경우 httpd.conf 에서 아래와 같이 HTTP 메소드 제한.
 <Directory />
 <LimitExcept GET POST>
  Order allow,deny
  deny from all
 </LimitExcept>
 </Directory>

[IIS]
IIS의 경우 WebDAV를 중지하거나 URL Scan과 같은 툴을 사용하여 HTTP 메소드 제한
(http://technet.microsoft.com/en-US/security/cc242650.aspx#e)

[Tomcat]
WEB-INF\web.xml 에 아래와 같이 설정
<security-constraint>
   <web-resource-collection>
   <web-resource-name>Forbidden</web-resource-name>
       <url-pattern>/*</url-pattern>
       <http-method>HEAD</http-method>
       <http-method>PUT</http-method>
       <http-method>DELETE</http-method>
       <http-method>TRACE</http-method>
   </web-resource-collection>

 

   <auth-constraint>
       <role-name></role-name>
   </auth-constraint>
</security-constraint>

 

 개발 언어별 대응방법
- 보안코딩(ASP)

If use_html Then  // HTML tag를 사용하게 할 경우 부분 허용
memo = Server.HTMLEncode(memo)  // HTML tag를 모두 제거

 

// 허용할 HTML tag만 변경
memo = replace(memo, "&lt;p&gt;", "<p>")
memo = replace(memo, "&lt;P&gt;", "<P>")
memo = replace(memo, "&lt;br&gt;", "<br>")
memo = replace(memo, "&lt;BR&gt;", "<BR>")

Else  // HTML tag를 사용하지 못하게 할 경우
memo = Server.HTMLEncode(memo)  // HTML encoding 수행
memo = replace(memo, "<", "&lt;")
memo = replace(memo, ">", "&gt;")
End If

Response.write "게시물 내용-" & memo & "<BR>"

 

- 보안코딩(PHP)

$use_tag = “img,font,p,br”;  // 허용할 HTML tag

If($use_html == 1)  // HTML tag를 사용하게 할 경우 부분 허용
$memo = str_replace(“<”, “&lt;”, $meno);  // HTML tag를 모두 제거

$tag = explode(“,”, $use_tag);
for($i=0; $i<count($tag); $i++)  // 허용할 tag만 사용 가능하게 변경
$meno = eregi_replace(“&lt;”.$tag[$i].” “, “<”.$tag[$i].” “, $memo);
$meno = eregi_replace(“&lt;”.$tag[$i].”>“, “<”.$tag[$i].”>“, $memo);
$meno = eregi_replace(“&lt;/”.$tag[$i], “</”.$tag[$i], $memo);

else  // HTML tag를 사용하지 못하게 할 경우

// $memo = htmlspecialchars($memo);
// htmlspecialchars() 사용시 일부 한글이 깨어지는 현상이 발생할 수 있음

$memo = str_replace(“<”, “&lt;”, $memo);
$memo = str_replace(“>”, “&gt;”, $memo);

echo “게시물 내용-“.$memo.”<BR>\n”;

 

- 보안코딩(JSP)

If(use_html)  // HTML tag를 사용하게 할 경우 부분 허용
memo = memo.replaceAll(“<”, “&lt;”);  // HTML tag를 모두 제거
memo = memo.replaceAll(“>”, “&gt;”);

// 허용할 HTML tag만 변경
memo = memo.replaceAll(“&lt;p&gt;”, “<p>”);
memo = memo.replaceAll(“&lt;P&gt;”, “<P>”);
memo = memo.replaceAll(“&lt;br&gt;”, “<br>”);
memo = memo.replaceAll(“&lt;BR&gt;”, “<BR>”);

else  // HTML tag를 사용하지 못하게 할 경우
memo = memo.replaceAll(“<”, “&lt;”);
memo = memo.replaceAll(“>”, “&gt;”);

out.print(“게시물 내용-“ + memo + “<BR>”);



 

안녕하세요? 허니입니다. Huff Post에서 "욕"이 가지는 긍정적인? 역할에 대해 재미난 글이 있어서 공유합니다. 과연 욕이라는 것이 긍정적인걸까요? 저도 궁금합니다.

 

'욕'이 가지고 있는 매우 긍정적인 역할 3가지

세상엔 그러거나 말거나 존재하는 것들이 있다. 싫어하건 좋아하건, 부정하건 파고들건 항상 어딘가에 있는 것들 말이다. '욕'도 그런 존재다. 어릴 적 '바른 생활' 교과서에서부터 우리는 '상스러운 말을 하지 않습니다.'란 문구를 보고 자랐지만 정말 단 한 번도 '상스러워'지지 않았다고 말할 수 있는 사람은 드물다(어쩌면 무엇이 '상스러운 말'인지를 구체적으로 배우질 않아서 그런 건지도 모르겠다.). 그러나 꼭 '바른 생활' 교과서만이 옳은 것일까? 설마?! 욕에는 욕만이 가지는 긍정적인 역할이 있다. 모든 게 그렇듯, 양면적인 도구라는 의미다. 연구를 통해 밝혀낸 '욕이 긍정적일 수 있는' 몇 가지 상황에 대해 알아보았다.

 

1. '어휘력'의 지표

 

욕을 '잘'한다는 건 때로 어휘력의 지표로 쓰일 수 있다. 물론 이 때 욕을 잘한다는 말은 특정 단어를 반복해서 쓴다는 의미는 아니다. 누군가를 말로 공격할 때 얼마나 '다양한 방법'을 동원할 수 있는지를 따지는 방식이다. 심리학자 T.제이는 피실험자들에게 '1분 안에 얼마나 많은 욕을 머릿속에서 떠올릴 수 있는가?'를 물었고, 그 결과 이 테스트에서 높은 점수를 받은 사람이 실제 언어구사력 테스트에서도 높은 점수를 받았다고 밝혔다. 언어구사력 테스트 점수가 낮은 사람이 욕도 별로 떠올리지 못한다는 점 역시 흥미롭다. 하긴 애초에 두 개가 상관이 없었다면 그 수많은 '갱스터 랩'과 '디스전'들도 생겨날 일이 없었을 것이다.

 

"...대개의 경우 언어구사능력이 뛰어난 사람은 주어진 시간 안에 조건에 맞는 단어를 더 많이 생각해낼 수 있다...일명 욕 유창성 과제는 1분 안에 욕을 가능한 많이 생각해내는 것이다...일반적인 언어구사력 점수가 낮으면 욕 유창성도 낮았다. 이것은 욕이 단지 빈약한 언어능력, 다른 말로 일반적인 어휘력 부족의 근거가 아니라, 오히려 언어를 유창하고 명확하게 구사할 줄 아는 사람이 의사소통의 효과성을 극대화하기 위해 자유자재로 활용할 수 있는 언어의 많은 특징 중 하나라는 것을 보여준다." (책 '우리는 왜 위험한 것에 끌리는가', 리처드 스티븐스 저)

 

2. 통증 완화

 

저자는 욕설이 통증 완화에 주는 효과를 아내의 출산을 곁에서 지켜보며 처음 발견했다고 한다. 분만 중 저자의 아내는 진통이 심해질수록 더욱 거친 욕들을 내뱉었는데, 의사와 간호사들은 조금도 당황하지 않고 오히려 그런 현상이 '지극히 정상적'이라고 말하며 아내와 저자를 안심시켰기 때문이다. 이를 계기로 진행한 저자의 연구에 의하면 실제 욕설은 참을 수 없는 고통이나 스트레스가 닥쳤을 때 이를 보다 '견딜만하게' 만들어주는 효과가 있음이 밝혀졌다. 다만 주의할 점은 평소 욕 사용빈도가 높은 사람일수록 효과가 덜했다는 사실이다. 상황에 따라선 욕도 '꼭 필요할 때만 복용해야 하는' 알약 같은 역할을 하는 셈이다.

 

"우리는 자원자들에게 얼음물에 손을 담근 채로 최대 5분까지 참을 수 있는 만큼 견뎌보라고 요청했다. 그런 다음 얼음물에 손을 담근 상태에서 욕을 하라고 주문했다...우리는 욕을 반복적으로 사용했을 때 얼음물 챌린지를 더 오래 견뎠고 덜 고통스럽다고 말했으며 심박동수가 크게 증가했다는 내용의 첫 번째 논문을 발표했다...흥미롭게도 평소 욕 사용빈도가 높은 사람일수록...통증내성효과가 줄어들었다...합리적이고 현명한 조언은, 가장 필요한 순간에 최대효과를 발휘할 수 있도록 평소에는 욕을 지나치게 많이 사용하지 말라는 것이다." (책 '우리는 왜 위험한 것에 끌리는가', 리처드 스티븐스 저)

 

3. 설득의 도구

욕은 때로 논지를 강화하는 'MSG' 같은 역할을 하기도 한다. 노던일리노이 대학 연구자들은 '등록금 인하'란 똑같은 메시지를 전달하는 두 개의 동영상을 피실험자들에게 보여주었는데, 그 중 하나는 욕설과 함께 메시지를 전달하는 영상이었다. 그 결과 욕설이 섞인 영상이 피실험자들에게 더 강한 호소력을 갖는 것으로 나타났다. 강연자가 자신이 전달하고자 하는 메시지를 더 '강하고 확실하게' 믿고 있음을 전달하는 역할을 욕설이 담당했던 것이다. 다만 이 때 주의해야 할 것은 피실험자들이 이미 '등록금 인하'란 주제에 대해 크게 공감하고 있던 상태였다는 점이다. 즉, 욕설이 섞인 메시지는 이미 비슷한 생각을 나누고 있는 사람끼리 확신을 강화시켜주는 도구일 순 있지만, 반대하는 사람을 찬성하도록 바꾸는 도구는 될 수 없다고 저자는 지적한다. 어떤 의미론 욕이 기존 구성원들의 '유대감'을 강화시켜주는 도구라고 볼 수도 있는 이유다.

 

"결과는, 강연자가 욕을 전혀 쓰지 않을 때보다 욕을 사용해서 말할 때 설득력이 더 높았다. 즉 욕이 포함된 연설을 들었을 때 학생들은 등록금 인하를 찬성하는 확고한 태도가 두드러졌다. 뿐만 아니라 욕은 연설의 강도에 대한 점수도 끌어올리는 효과가 있었던 반면, 강연자의 신뢰성 점수에는 아무런 영향을 미치지 못했다. 이런 결과는, 논지를 강조하기 위해 욕을 사용하면 주장의 설득력을 높일 수 있음을 뜻한다...하지만...욕은 이미 청자가 화자의 주장에 대해 공감하는 태도일 때에만 주장을 강화하는 좋은 수단이 될 수 있다." (책 '우리는 왜 위험한 것에 끌리는가', 리처드 스티븐스 저)

 

 

안녕하세요? 허니입니다. 여행을 하다보면 누구나 머물고 있던 도시에서 알차게 시간을 보내고 싶을 겁니다. 그럴 때 저를 포함해서 많은 분들이 어디를 가야할지 고민을 많이 하게 됩니다. 그래서 제가 독자분들께 현재 여행하고 있는 도시에 하루 여행 코스를 안내해 드리겠습니다. 더 좋은 의견이 있으신분들은 댓글 달아 주시면 반영하도록 하겠습니다. 


오늘의 여행 코스


 폰덜파크 지역 하루 일정

 워털루 광장 지역 하루 일정

 담 광장 지역 하루 일정

 예술인을 위한 암스테르담 하루 일정

 번외: 아이들과 함께 하루 일정




폰덜파크 지역 하루 일정

 

  알버트 쿠입 마켓 →  반 고흐 미술관 →  레이크스뮈세윔 →  폰델 공원

 예상 여행 런타임: 7시간

 

 1. 알버트 쿠입 마켓(Albert Cuyp Market)

 - 소요시간: 1시간

 

 이동 시간: 걸어서 14분

 

 2. 반 고흐 미술관(Van Gogh Museum)

 - 소요시간: 2시간

 - 실제로 빈센트 반 고흐는 전 세계적으로 가장 사랑받고 가장 많이 기억되는 화가 중의 한 명이다. 1853년 네덜란드 작은 마을에서 태어난 반 고흐는 목사였던 아버지의 영향으로 성직자의 길을 걷고자 하였다. 그러나 광신도적인 기질과 강한 성격 탓에 성직자의 길을 걷는 것에 실패한 뒤 그림을 그리는 것만이 자신을 구원하는 길이라 믿고 화가가 되기로 결심한다. 그리고 1890년 사망하기 전까지 수많은 작품들을 세상에 내놓았고 그중 많은 작품들이 그의 조국 네덜란드, 암스테르담 반 고흐 미술관에서 그를 기억하고 사랑하는 사람들과 만나고 있다.

 

 이동 시간: 걸어서 2분

 

 3. 레이크스뮈세윔(Rijksmuseum)

 - 소요시간: 2시간

 - 1808년 당시의 왕, 나폴레옹의 동생 루이 보나파르트가 세운 왕립미술관으로 발족했으며 첫 소장품은 1800년에 세운 박물관 '나티오날레 쿤스트 할레레이'에서 프랑스로 보내지 않았던 그림들이었다. 그리고 보나파르트 일가가 쫓겨난 후 이 소장품들은 트리펜호이스에 보관되었다가 1815년에 암스테르담 레이크스뮈세윔에서 일반에게 공개되었다. 1885년에 개관된 새 건물은 P. J. H. 코이퍼르스가 고딕 복고풍 양식으로 설계한 것이다.

 

 이동 시간: 걸어서 14분

 

 4. 폰델 공원(Vondelpark)

 - 소요시간: 1시간

  




워털루 광장 지역 하루 일정

 

  렘브란트 하우스 박물관 →  워터루 광장 벼룩시장 →  암스테르담 식물원 →  허미티지 암스테르담 →  빌렛-홀트하우젠 박물관

 예상 여행 런타임: 6시간

 

 1. 렘브란트 하우스 박물관(Rembrandt House Museum)

 - 소요시간: 1시간

 - 네덜란드 예술가 렘브란트 판 레인(1606~1669)이 암스테르담의 세련된 브레이스트라트 지역에 있는 이 크고 웅장한 연립 주택을 구입하겠다는 서명을 했을 때, 그의 인생은 최상의 자리에 이른 것처럼 보였다. 1639년이었던 당시, 그의 작품은 도시 전역에서 명성이 자자했다. 그는 상당한 돈을 벌었지만, 그렇더라도 1만 3천 길더라는 돈은 당시로써는 엄청난 금액이어서 그는 이를 분할 납부하기로 계약했다.

 

 이동 시간: 걸어서 1분

 

 2. 워터루 광장 벼룩시장(Waterlooplein Market)

 - 소요시간: 45분

 - 전자제품, 생활잡화, 골동품 등을 거래하는 중고 물품 시장이다. 유니크한 유럽의 옛 물건들을 저렴한 가격에 구입할 수 있다. 구경을 하는 행인들과 흥정을 하는 상인들이 북적거려 시장 분위기가 활기차다.

 

 이동 시간: 걸어서 7분

 

 3. 암스테르담 식물원(Hortus Botanicus Amsterdam)

 - 소요시간: 1시간 30분

 

 이동 시간: 걸어서 6분

 

 4. 허미티지 암스테르담(Hermitage Amsterdam)

 - 소요시간: 1시간 30분

 

 이동 시간: 걸어서 4분

 

 5. 빌렛-홀트하우젠 박물관(Museum Willet-Holthuysen)

 - 소요시간: 1시간

 




담 광장 지역 하루 일정

 

  암스테르담 구교회 →  암스테르담 왕궁 →  암스테르담 신교회 →  암스테르담 박물관 →  안네 프랑크의 집

 예상 여행 런타임: 6시간

 

 1. 암스테르담 구교회(The Oude Church)

 - 소요시간: 30분

 - 네덜란드 암스테르담. 성 니콜라스를 모시기 위해 13세기에 지어진 암스테르담에서 가장 오래된 교회이다. 처음엔 카톨릭 성당이었다고 한다. 암스테르담의 교회 중 가장 오래된 교회로 13세기까지 거슬러 올라가는 역사를 가지고 있다. 중앙역에서 도보로 약 5분 거리로, 유명한 암스테르담 홍등가와 인접해 있다. 1366년에 무역상들과 선원들의 수호자인 미라의 성 니콜라스(St. Nicholas of Myra)를 기념하기 위해 건축을 시작하였고 1566년 종각과 첨탑을 완성함으로 마무리되었다. 네덜란드의 많은 교회가 그렇듯 처음에는 가톨릭 성당이었지만 훗날 개신교회당으로 바뀌었다.

 

 이동 시간: 걸어서 6분

 

 2. 암스테르담 왕궁(Royal Palace Amsterdam)

 - 소요시간: 1시간 30분

 - 암스테르담 시내 중심부에 있는 담 광장에 위치한다. 1648년 네덜란드 연방 공화국의 독립이 승인된 해에 야콥 반 캄펀(Jacob van Campen)이 건축하였다. 고전미와 위용을 느낄 수 있는 이 건물은 네덜란드의 황금시대의 상징이다. 본래 암스테르담 시청사로 쓸 목적으로 착공되었으며, 약 200년 동안 네덜란드의 정치적 구심점 역할을 담당해 왔다. 1808년 프랑스 점령 당시 루이스 나폴레옹 왕이 왕실로 용도를 바꾸었다. 왕궁에서 볼 수 있는 호화로운 실내 장식 상당수가 나폴레옹 점령 당시에 들여온 것이다. 지금은 네덜란드의 군주인 베아트릭스 여왕과 그의 가족 등 귀빈을 모시는 용도로 사용되고 있다.

 

 이동 시간: 걸어서 1분

 

 3. 암스테르담 신교회(The new church)

 - 소요시간: 30분

 - 담 광장(Dam Square)의 왕궁과 바로 근접해 있는 암스테르담을 대표하는 교회로써, 성 카트리나(St. Catherine)과 성 마리(St. Mary)에게 봉헌되어 '성 카트리나 교회'라는 이름으로 불리우기도 한다. 프랑스 고딕 성당들의 영향을 받아 1400년대 초에 지어진 교회 건물은 1421년과 1452년 두 번 있었던 암스테르담 대화재를 별다른 피해 없이 무사히 넘겼으나, 그로부터 약 2세기 후 하수도 공사를 하던 인부들의 실수로 일어난 불이 번져 결국 건물 전체가 타버리는 재난이 일어났다. 훗날 복구된 건물은 비록 원래의 모습은 아니지만, 몇 번의 리모델링을 통해 더 아름다운 현재 모습을 갖추게 되었고, 지금은 왕족의 대소사를 비롯한 국가의 중요한 행사들을 담당하는 교회로 자리 잡았다.

 

 이동 시간: 걸어서 5분

 

 4. 암스테르담 박물관(Amsterdam Museum)

 - 소요시간: 1시간 30분

 

 이동 시간: 걸어서 13분

 

 5. 안네 프랑크의 집(Anne Frank House)

 - 소요시간: 1시간 30분

 




예술인을 위한 암스테르담 하루 일정

 

 1. 암스테르담 시립미술관(Stedelijk Museum Amsterdam)

 - 소요시간: 2시간

 - 요약 19~20세기의 유명한 회화와 조각 작품들이 소장되어 있는 암스테르담의 시립미술관으로 빈센트 반 고흐와 데 스테일 운동에 참가한 화가들, 1950년 이후의 유럽과 미국 화가들의 유명한 작품들을 소장하고 있다. 소묘와 판화, 응용미술, 사진, 영화작품들도 소장하고 있다. 도서관에는 1만 5,000권 이상의 서적과 7만 권이 넘는 카탈로그가 보관되어 있다.

 



 

번외: 아이들과 함께 하루 일정

 

  열대 박물관 →  마담 투소 →  안네 프랑크의 집

 예상 여행 런타임: 6시간

 

 1. 열대 박물관(Tropen museum)

 - 소요시간: 2시간

 

 이동 시간: 자동차로 11분

 

 2. 마담 투소(Madame Tussauds)

 - 소요시간: 2시간

 - 마담 투소는 런던 본점을 포함한 여러 나라 대도시에 있는 밀랍 인형 박물관이다. 마담 투소 박물관은 밀랍 조각가 마리 투소에 의해 설립되었으며, 예전에는 "Madame Tussaud's"라고 주로 불렸지만, 요즘에는 별로 쓰지 않는다. 마담 투소 박물관은 역사적인 왕실 인물, 유명한 영화 배우, 가수, 스포츠 스타, 악명높은 살인자의 밀랍 인형을 전시하는 런던의 주요 관광 명소이다.

 

 이동 시간: 걸어서 10분

 

 3. 안네 프랑크의 집(Anne Frank House)

 - 소요시간: 1시간 30분

 - 안네 프랑크의 집은 네덜란드 암스테르담에 있는 박물관으로,1942년부터 1944년까지 유대인이었던 안네 프랑크가 숨어 살았던 집이다. 안네가 있었던 다락방 및 안네의 일기, 사진 등이 그대로 보존되어 있다. 안네 프랑크 재단이 관리 운영을 실시하고 있다. 나치 정권의 학살에 관한 잔혹한 자료와 사진 등을 전시하고 있는 자료관도 있다.

 



안녕하세요? 허니입니다. Huff Post에서 스티브 잡스에 대한 내용으로 인생의 지혜 4가지를 잘 설명하여 공유합니다.

 

스티브 잡스가 우리에게 들려주는 인생의 지혜 4가지

기업 경영자 중 이름이 알려진 사람이 생각보다 많지 않다. 기업이나 상품, 브랜드 등은 유명해도 경영자 명성은 그에 미치지 못하는 경우가 많다. 그런데, 스티브 잡스는 그렇지 않았다. 살아 생전, 끊임없이 화제를 불러 일으켰다. 특히 애플에서 아이팟, 아이폰 등을 연달아 히트 칠 때는 애플 제품을 구입하지 않은 사람들조차 스티브 잡스를 알 정도였다. 그의 어록을 통해 왜 스티브 잡스가 우리에게 깊은 울림을 주었으며, 지금까지도 회자되고 있는지를 살펴 보았다. 한 마디 한 마디 끄덕일 수밖에 없는 내용이다.

 

1. 모든 점들은 연결된다.

 

“여러분은 과거를 뒤돌아봤을 때에 비로소 점들을 연결할 수 있습니다. 그러므로 모든 점들은 당신의 미래와 어떻게든 결국은 이어질 것이라는 것을 믿어야만 합니다. 본능, 운명, 삶, 업보 등 무엇이든 간에 점들이 결국 연결되어 하나의 길을 이루게 될 것이라 믿어야 합니다. 그러면 여러분은 당신의 가슴이 움직이는 대로 따르는 자신감을 가지게 될 것입니다. 설사 당신의 마음을 따르는 것이 잘 닦여진 길에서 벗어날지라도 그것이 여러분들을 남들과 다르게 만들어 줄 것입니다.” (책 ‘스티브 잡스 I Said’, 김정남 엮음)

 

무언가를 결정할 때 사람들은 두려워한다. 결국 실패에 대한 두려움이다. 하지만 스티브 잡스는 그럴 필요가 없다고 강조한다. 경험 하나하나가 모두 삶의 소중한 교훈이 될 수 있기 때문이다. 스티브 잡스 역시 숱한 실패와 시행착오를 거쳐왔다. 실패를 하지 않는 사람은 없다. 그것을 극복하기 위해서는 모든 점들이 연결된다는 긍정적인 생각이 필요하다. 실패의 경험이라고 해서 결코 끊긴 것은 아니다. 모두 이어진다.

 

2. 보이지 않는 곳까지 챙겨야 한다.

 

“우리가 할 수 있는 한 최고의 제품을 만들고 싶습니다. 목수가 아름다운 서랍장을 만들 때 ‘아무도 보지 못할 테니 벽 쪽을 향하는 서랍장 뒷면은 합판을 사용하자!”라고 하지는 않을 것입니다. 제대로 된 서랍장을 만들기 위해서는 뒷면도 아름다운 나무를 사용해야 한다는 것을 당신도 잘 알고 있습니다. 발을 뻗고 자기 위해서, 우리는 미학적으로나 품질적으로 제품 전체의 완벽성을 끝까지 추구해야 합니다.”(책 ‘스티브 잡스 I Said’, 김정남 엮음)

 

보이지 않는 곳까지 챙기는 것은 디테일의 예술이다. 스티브 잡스 아버지의 영향을 받았다고 한다. 그의 아버지 폴 잡스는 캐비닛이나 울타리를 만들 때에는 잘 보이지 않는 뒤쪽까지 신경을 써야 한다고 늘 강조했다. 뒤쪽을 어떻게 마무리 했느냐에 따라 제품 품질이 차이가 나기 때문이다. 특히 모든 정보가 공유되는 요즘 같은 때는 더욱 필요한 덕목이다. 세밀한 부분까지 신경 쓰지 않았다는 사실이 SNS 등을 통해서 금세 널리 퍼지기 때문이다.

 

3. 디자인의 제대로 된 의미를 알아야 한다.

“’디자인’은 참 재미있는 단어입니다. 어떤 사람들은 디자인을 단순히 제품의 외형 정도로만 생각합니다. 하지만 좀 더 깊이 들어가면 사실은 제품이 어떻게 작동하느냐를 의미하는 것입니다. 맥의 디자인은 단순히 외형만을 뜻하는 게 아닙니다. 물론 외형을 포함하기는 하지만 가장 중요한 것은 작동 방식입니다. 정말로 디자인을 잘하고 싶다면 여러분은 이것을 확실히 이해하고 있어야 합니다. 즉 제품의 본질을 완벽하게 통달해야만 하는 것이죠. 겉핥기가 아니라 완벽하게 제품을 이해하기 위해서는 열정적으로 헌신을 다해야만 합니다. 하지만 대부분의 사람들은 그런 일에 많은 시간을 들이지 않습니다.” (책 ‘스티브 잡스 I Said’, 김정남 엮음)

 

디자인은 겉모습이라고만 흔히 생각한다. 제품을 만들거나 서비스를 공급하는 기업 직원들도 이런 생각에 머물러 있는 경우도 많다. 스티브 잡스는 외형이 아니라 어떻게 작동하느냐도 디자인의 영역이라고 말한다. 작동에 대해 제대로 고민을 하려면 제품 본질을 꿰뚫고 있어야 한다. 디자인에 대한 그의 생각을 통해 스티브 잡스 특유의 완벽주의를 느낄 수 있다.

 

4. 실리콘밸리에서 자란 것은 행운이다.

“실리콘밸리에서 자란 것이 정말이지 행운이었습니다. 제가 열 살이나 열한 살쯤 되었을 때 저는 첫 컴퓨터를 보게 되었습니다. 나사(NASA)의 에임스 연구 센터였습니다. 지금 같은 컴퓨터는 아니었고, 어떤 전기 단자였는데 이론적으로는 전선들이 다른 쪽으로 연결되어 있는 컴퓨터였습니다. 저는 이 컴퓨터와 사랑에 빠졌습니다. 데스크 톱 컴퓨터를 처음 본 것은 휼렛 패커드였습니다. 9100A라고 불리는 세계 최초의 데스크톱 컴퓨터였습니다.”(책 ‘스티브 잡스 I Said’, 김정남 엮음)

 

인생에는 확실히 운도 작용한다. 저자의 말에 따르면, 스티브 잡스가 성장기를 보낸 실리콘밸리는 원래 농촌 마을이었고 스티브 잡스가 자라면서 함께 도시도 첨단 도시로 성장했다. 컴퓨터 등 최신 기기와 트렌드를 익힐 수 있었다. 첨단 공학을 접하는 것도 별로 어렵지 않았다. 컴퓨터는 사업적으로 큰 기회였지만, 실리콘밸리에 스티브 잡스가 살고 있었다는 것이 더욱 큰 기회였던 셈이다.

안녕하세요? 허니입니다. SQL Injection 취약점에 대해서 알아보고 대응 방법에 대해 알아보도록 하겠습니다. 사이버 해킹에 대해 공부하시는 학생이나 연구원 분이 계시면 도움이 될 것이라 생각합니다.


대부분의 웹 사이트들은 사용자로부터 입력 받은 값을 이용해 데이터베이스 접근을 위한 SQL-Query를 사용하고 있습니다. 사용자 로그인 과정을 예로 들면, 사용자가 유효한 계정과 패스워드를 입력했는지 확인하기 위해 사용자 계정과 패스워드에 관한 SQL Query문을 사용하게 되며 이때 SQL Injection 기법을 통해서 정상적인 SQL Query를 변조할 수 있도록 조작된 사용자 이름과 패스워드를 보내 정상적인 동작을 방해할 수 있습니다. 이러한 비정상적인 SQL Query를 이용해 다음과 같은 공격이 가능합니다.

 

- 사용자 인증을 비정상적으로 통과 가능
- 데이터베이스에 저장된 데이터를 임의로 열람, 삽입, 수정, 삭제 가능
- 데이터베이스의 시스템 명령을 이용하여 시스템 조작 가능

 

이러한 취약점을 SQL Injection 취약점이라고 하며, DBMS와 연동된 웹 페이지상에 취약점이 존재합니다.

 

 일반적인 대응방법
데이터베이스와 연동이 되는 SQL 쿼리 구문의 모든 파라미터를 필터링하여 사용자의 입력 값이 SQL 쿼리에 직접 입력되지 않도록 수정합니다. 사용자 입력이 SQL injection을 발생시키지 않도록 사용자 입력 시 특수문자(' " / \ ; : Space -- +등)가 포함되어 있는지 검사하여 허용되지 않은 문자열이나 문자가 포함된 경우에는 에러로 처리합니다. SQL 서버의 에러 메시지를 사용자에게 보여주지 않도록 설정한다. 공격자는 리턴 되는 에러 메시지에 대한 분석을 통하여 공격에 성공할 수 있는 SQL Injection 구문을 작성할 수 있습니다. 따라서 SQL 서버의 에러 메시지를 노출하지 않도록 합니다. 웹 애플리케이션이 사용하는 데이터베이스 사용자의 권한을 제한합니다. 가능하면 일반 사용자 권한으로는 모든 system stored procedures에 접근하지 못하도록 하여 웹 애플리케이션의 SQL Injection 취약점을 이용하여 데이터베이스 전체에 대한 제어권을 얻거나 데이터베이스를 운용 중인 서버에 대한 접근이 불가능하도록 합니다.

 

 개발 언어별 대응방법
사용자로부터 입력 받은 변수로 SQL 쿼리 구문을 생성하는 CGI는 입력 받은 변수를 체크하거나 변경하는 로직을 포함하고 있어야 합니다. 입력 받은 변수와 데이터 베이스 필드의 데이터 형을 일치 시켜야 하고, 사용 중인 SQL 구문을 변경시킬 수 있는 특수문자가 포함되어 있는지 체크해야 합니다. 검색 부분과 같이 클라이언트로부터 생성된 SQL 구문을 받는 부분이 있다면 이를 제거해야 합니다.

 

 보안코딩(ASP)

prodId = Request.QueryString("productId")
prodId = replace(prodId, "'", "''")' 특수문자 제거
prodId = replace(prodId, ";", "")
set conn = server.createObject("ADODB.Connection")
set rs = server.createObject("ADODB.Recordset")
query = "select prodName from products where id = " & prodId
conn.Open "Provider=SQLOLEDB; Data Source=(local);
Initial Catalog=productDB; User Id=dbid; Password="
rs.activeConnection = conn
rs.open query
If not rs.eof Then
response.write "제품명" & rs.fields("prodName").value
Else
response.write "제품이 없습니다"
End If

 

 보안코딩( php)

php.ini 설정 변경 / php.ini 설정 중 magic_quotes_gpc 값을 On으로 설정.

; Magic quotes
;

; Magic quotes for incoming GET/POST/Cookie data
magic_quotes_gpc = ON ; Off에서 On으로 변경한다.

; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off

;Use Sybase-style magic quotes (escape ' with " instead of \').
magic_quotes_sybase = Off

 

addslashes() 함수 사용
사용자가 입력하는 값들($_GET, $_POST)을 모두 addslashes() 함수를 이용하여 처리할 수 있도록 함.

addsIshes()
용도 : DB Query와 같이 인용된 부분 앞에 역슬래쉬를 붙여서 반환합니다. 해당문자에는 작은 따옴표, 큰 따옴표, 역슬래쉬, NULL이 있다.
- 적용 가능한 PHP : PHP 3 이상

$query = sprintf("SELECT id,password, username FROM user_table WHERE id='%s';", addslashes($id)); // id변수를 문자형으로 받고, id변수의 특수문자를 일반문자로 변환한다.

// @ 로 php 에러 메시지를 막는다.
$result = @OCIParse($conn, $query);
if (!@OCIExecute($result))
error("SQL 구문 에러");
exit;
@OCIFetchInto($result,&$rows);

 

 보안코딩(JSP)

String sql = "SELECT * FROM user_table" + " WHERE id = ?" + " AND password = ?";
ResultSet rs = null;
PreparedStatement pstmt = null;
try
conn = DBManager.getConnection();
pstmt = conn.prepareStatement(sql);

pstmt.setString(1, request.getParameter("id"));
pstmt.setString(2, request.getParameter("password"));

rs = pstmt.executeQuery();

 

 

안녕하세요? 허니입니다. 대화를 하다보면 상대방에게 신뢰를 얻을수도 잃을 수도 있습니다. 과연 어떻게 하면 상대방에게 신뢰를 얻을 수 있을까요? Huff Post에서 소개한 글을 공유 합니다.


상대방의 신뢰를 얻기 위해 필요한 태도 3가지


사람들에게 신뢰를 받는 것은 쉽지 않다. 때로는 피곤한 일이고, 때로는 지루한 일이다. 그렇지만 대부분의 사람들은 신뢰를 받고 싶어한다. 특히 친구에게 신뢰를 받는 일은 신난다. 가장 가까이에 있는 사람이 나를 믿어준다는 것은 그만큼 내가 잘 해 왔다는 증거이기 때문이다. 어떻게 하면 사람들에게 믿음직한 인상을 줄 수 있을까? 신뢰를 받기 위한 방법을 고민한 책을 통해 그 답을 알아 보았다.


1. 적을 원한다면 친구를 능가하라.


 

“오래도록 만난 친구와 우린 왜 성장하면서 서로 그 관계를 지속해 나가기가 쉽지 않을까요? 프랑스의 철학자 라 로슈푸코는 그에 대해 이런 대답을 해 줍니다. “만일 당신이 적을 원한다면 친구를 능가하십시오.” 이 말은 친구를 적으로 만들고 싶으면 그 친구보다 훨씬 월등한 사람이 되라는 말입니다. “아니 친구를 적으로 만들다니요? 그리고 적으로 만들기 위해서 내가 친구를 능가해야 한다는 것은 무슨 의미인가요?” 라 로슈푸코는 한 마디를 더 합니다. “그러나 정작 당신이 친구를 원한다면, 친구가 당신을 능가할 수 있도록 하십시오.” 오래도록 친구와의 관계를 유지해 가기 위해서라면, 나 자신을 보다 겸손히 낮추고 친구의 위신을 세워주라는 의미입니다.” (책 ‘사람들이 나를 신뢰하게 만드는 7가지 비결’, 존 더글라스 저)


사실 친하지 않던 사람과 사이가 틀어지는 일보다 친구 사이에 틀어지는 경우가 더 많다. 그만큼 가까이에 있어서 서로 상처를 주기 쉽기 때문이다. 가장 상처를 주는 경우는 상대방의 자존심을 건드릴 때다. 친구 사이일수록 그래서 더욱 겸손해야 한다. 나보다 잘난 친구를 두는 것을 자랑스러워하고, 친구의 장점을 도드라지게 도와주어야 한다. 그렇지 않고 친구를 뛰어넘으려고 하면, 친구가 적이 될 수도 있다.


2. 질문형 대화를 하면 마음의 문이 열린다.


“일방적인 대화법은 상대방을 코너로 몰아넣는 것과 같습니다. 예를 들어 권투선수가 상대방을 코너로 몰아넣게 되면 상대방은 빠져 나오기 위해서 반발을 하게 됩니다. 대화에서도 마찬가지로 상대를 코너로 몰아넣을수록 상대는 마음을 더욱 닫으면서 방어하는 태도를 취하게 됩니다. 이럴 때일수록 상대의 방어를 풀어 줄 수 있는 대화법이 필요합니다. 그게 바로 질문형 대화법이란 것입니다. 질문형 대화법은 자신의 이야기를 먼저 하기 전에 상대로 하여금 먼저 이야기하게 만드는 것입니다. 이 대화법에 익숙해지면 누구를 만나든지 주눅이 들 필요가 없습니다. 나이가 많은 어른을 만나서도 대화에 자신감을 가질 수 있으며, 이성을 소개받게 되더라도 어렵지 않게 대화를 풀어갈 수 있습니다.” (책 ‘사람들이 나를 신뢰하게 만드는 7가지 비결’, 존 더글라스 저)


상대의 마음을 얻는 대화법으로 저자는 질문형 대화를 제시한다. 상대방과 이야기를 나누려면 먼저 상대방이 자신이 하고 싶은 이야기를 하도록 해야 하는데 그 방법으로 질문을 던지는 것이 적당하다. 질문을 몇 가지 던지고 나면 마음을 열고 서로 대화에 귀를 기울일 수 있는 분위기가 잡혀가기 때문이다. ‘아름다운 스카프를 하셨네요.’라고 말한 뒤 침묵을 지키지 말고, ‘어디서 사셨는지요?’라고 이어서 물어보라고 저자는 제안한다.


3. 상대의 입장이 되어 보는 것이 중요하다.


“내가 사람들에게 신뢰를 얻고 싶어 할 때마다 가장 힘든 난관으로 부딪치는 게 있다면, 내가 그 사람과 용모가 다르기 때문이 아니라 바로 ‘생각’이 다르기 때문입니다. 즉 사람들은 자신과 생각이 같은 사람에게는 쉽게 신뢰를 주지만, 자기와 생각이 다른 사람에게는 신뢰는커녕 그의 의견을 인정하기도 어려워할 때가 많기 때문입니다. 그렇다면 우리는 나와 생각이 다른 사람에게 신뢰를 얻기 위해 어떻게 해야 할까요? 그 사람의 심리를 파악하는 것이 중요합니다. 그렇다면 사람의 심리를 간파하는 가장 좋은 방법은 무엇일까요? 우선 자기 자신의 심리를 잘 분석해 보는 데서 시작할 수 있습니다. ‘내가 이런 말을 하면 저 사람은 어떤 반응을 보일까?’라는 생각을 하고 있다면, 상대방의 관점에서 똑같이 그 말을 해 보기 바랍니다.” (책 ‘사람들이 나를 신뢰하게 만드는 7가지 비결’, 존 더글라스 저)


다른 사람에게 신뢰를 얻기 위해서는 철저하게 그의 생각과 행동을 이해해야 한다. 보통의 사람들은 자신의 생각 따라 반응을 해 주는 사람에게 신뢰를 보내기 때문이다. 흔히 ‘역지사지’라고 부르는 말이다. 그러나 쉽지는 않다. 자기 위주로 생각하는 것이 사람들에게는 너무 당연한 일이다. 그만큼 타인의 신뢰를 얻는 일은 어렵다. 다른 사람 입장에 서서 그를 이해할 수 있는 사람만이 신뢰를 구한다.

안녕하세요? 허니입니다. Huff Post에서 콤플렉스에 다룬 내용이 있어 공유 합니다.

 

'콤플렉스'에 대해 우리들이 잘못 알고 있는 3가지

 

일상 용어가 되어버린 학술 용어들이 있다. '아우라'나 '페미니즘' 등이 그렇다. 그 중 '콤플렉스'란 용어는 압도적이다. 무려 1933년 신문에서도 '콤플렉스'란 용어가 일반 기사에 설명 없이 쓰인 걸 발견할 수 있을 정도다. 지금 우리에게 '콤플렉스'란 말이 친숙하게 느껴지는 것도 무리는 아니다. 그러나 일상에서 사용되는 '콤플렉스'의 뜻과 실제 심리학에서 쓰이는 '콤플렉스'의 의미가 완전히 같진 않다. 일본 융 심리학의 1인자로 불리는 저자가 풀어 쓴 '콤플렉스'에 대한 설명을 통해 우리가 그 동안 잘못 알고 있었던 ‘콤플렉스’에 대한 오해 3가지를 정리해보았다. 이것은 나와 내 주변에 대한 오해를 푸는 과정이기도 하다.

 

1. 콤플렉스는 '열등감'을 뜻하는 단어가 아니다.

 

일상 생활에서 '콤플렉스'가 쓰이는 대부분의 경우는 '열등감'의 다른 말로 사용될 때다. 그러나 콤플렉스(Complex)의 뜻이 '덩어리', '집합체'인 데서 짐작할 수 있듯, 콤플렉스는 '단 한 가지의 감정'만을 의미하진 않는다. 오히려 매우 다양한 감정이 엮여 있는 '감정의 복합체'라고도 볼 수 있다. '메시아 콤플렉스'처럼 열등감과 우월감이 미묘하게 섞인 경우가 대표적 사례다.

 

이는 콤플렉스가 단순한 감정이 아닌 자아에 의해 억눌린 '또 다른 나'를 의미하기 때문이다. '또 다른 나'에 대한 감정이 단순할 수는 없을 것이다. 저자는 이를 '정당 내 정파'라는 비유를 통해 설명한다. '나'라는 정당 안에서 '자아'는 현재 정당을 이끄는 주류 정파다. 그러나 주류 정파가 있다 해서 서로 다른 의견을 가진 '군소 정파'들이 없다고 볼 수는 없다. 보통의 경우엔 이들도 주류의 의지에 눌려 잘 따라가지만, 사안에 따라 격렬하게 반발하며 주도권을 빼앗으려 들 때가 있다. 바로 이 '군소 정파'가 '콤플렉스'라는 것이다. 강한 콤플렉스가 불러오는 병리적 현상으로 '이중 인격' 등이 존재하는 이유다.

 

이러한 콤플렉스가 존재하는 이유를 융은 '상보성'의 개념을 들어 설명한다. '자아'는 그 특성상 '일관성'과 '안정성'을 가지기를 원하는데, 경험을 쌓고 자아가 발달하는 과정에서 기존의 자아로는 해결할 수 없는 욕망이나 문제들과 맞닥뜨리게 된다. 그 때 이러한 문제들을 무의식에 밀어 넣게 되는데, 물론 그런다고 애초 자아를 위협했던 문제와 욕망들이 마음 속에서 사라지는 게 아니기 때문에 이것이 '내가 가진 또 다른 나'인 콤플렉스가 되어 자아의 부족함을 보상하려 든다는 것이다. 예를 들어 부모 뜻에 따라 공부만 했던 한 학생이 대학이란 새로운 상황에서 수많은 이성을 맞닥뜨리게 됐을 때, 그 학생의 자아는 '부모님의 뜻'에 따라 공부에만 집중했던 일관성을 지키기 위해 자신에게 새로이 나타난 '이성에 대한 관심'을 무의식으로 밀어 넣어버릴 수 있다. 그러나 '이성에게 잘 보이고 싶은 또 다른 나'는 무의식 중에 여전히 남아 이 학생에게 '대인 공포증', '혐오' 등의 영향력을 행사할 수도 있는데, 바로 이 '이성에게 잘 보이고 싶은 또 다른 나'가 콤플렉스라는 것이다. 따라서 콤플렉스는 부정적이거나 열등한 현상이 아닌, 인간이 살아가고 발전하는 한 누구라도 가질 수밖에 없는 심리 현상이며, 오히려 그것은 '자아가 한 단계 도약'할 시기가 되었다는 신호를 보내주는 고마운 존재일 수 있다. 잘만 활용한다면 말이다. 즉, 콤플렉스는 '인격 발달'의 목적을 달성하는데 중요한 역할을 담당 할 수 있다는 것이 융의 입장이라고 저자는 설명한다.

 

"...공부벌레에다 이성에 관심이 없던 이 여학생의 자아는 나름대로 하나의 통합성을 갖고 있었을 것이다...그런데 그 자아를 보충하는 것으로서 이성에게 관심을 갖는 경향이 무의식 속에서 솟구쳐 올라온 것이다...대인공포증이라는 증상은 안정을 무너뜨리고 싶지 않은 자아와 그것에 압력을 가하고 있는 콤플렉스의 타협의 산물 같은 것이다. 그러나...자아는 조금씩 콤플렉스의 존재를 받아들이는 한편으로, 자신이 이성에 관심을 갖지 않았다는 일면성도 받아들인다...융은...이러한 현상들은 새로운 인격의 발전 가능성이 어떤 특수한 곤란성으로 인해 방해를 받기 때문에 일어난다고 생각할 수 있음을 지적한다...융은 콤플렉스의 표출이 마이너스적인 면도 있음을 인정하고, 거기에 인격의 발전 가능성으로서 목적론적 관점을 도입했다." (책 '콤플렉스', 가와이 하야오 저)

 

2. '콤플렉스'는 '나약한 사람들'에게 생기는 병이 아니다.

 

앞서 말한 설명을 받아들인다면, '콤플렉스'의 존재만으로 누군가가 더 '열등하다'고 볼 수는 없다는 사실을 인정하게 된다. 문제는 콤플렉스의 강한 영향력으로 '노이로제' 등의 병리적 현상이 일어난 사람들의 정신력이 '나약'하다고 은연중에 생각하는 태도다. 저자는 이런 시선이 매우 잘못된 편견이라고 지적한다. 위대한 성취를 이룬 뛰어난 인간들에게서도 노이로제는 흔히 발견할 수 있는 현상이었다. 일단 프로이트부터가 노이로제였다. 일본 야수파의 거장 하야시 다케시(林武) 등 위대한 예술가들 중에서도 노이로제 증상을 보인 이는 많았다. 이들이 전부 노이로제에 걸린 이유가 '나약해서'라면, 과연 그 많은 성취를 이룰 수 있었겠느냐고 저자는 반문한다.

 

결국 노이로제 등의 현상이 생겨날지 말지는 자아와 콤플렉스의 상대적 관계 속에 달려있다고 저자는 지적한다. 자아의 힘에 비해 콤플렉스가 지나치게 강할 때 노이로제가 생길 가능성이 높아지는데, 이것이 꼭 '자아가 약해서'인 것만은 아니다. 아무리 자아가 강해도 환경과 상황이 만들어낸 콤플렉스가 그보다 센 경우는 얼마든지 발견할 수 있고, 이것이 노이로제를 불러왔다고 해서 바로 그것을 개인의 '자질' 문제와 연결시키는 건 위험한 단정이라는 것이다. 거꾸로 지금 노이로제를 겪고 있지 않은 사람이 자신이 가진 콤플렉스나 문제들을 남에게 떠넘겨 타인에게 피해를 주며 자신만 '정상'으로 생활하는 경우도 자주 발견할 수 있다. 노이로제의 유무만으로 사람의 우열을 나누는 태도는 매우 잘못되었다는 결론을 저자가 내리는 이유다.

 

"노이로제란 어떤 콤플렉스가 자아에 영향을 미치고 그것이 신경증 증세로 나타나는 경우다. 신경증의 증세는 다양하지만, 본인이 그것을 병적인 증세로 받아들여 이상하다고 여기면서도 도저히 의식적으로는 고치지 못한다. 여기서 나는, 자아가 콤플렉스의 영향 아래에 있더라도 노이로제가 된 사람의 자아가 그렇지 않은 사람의 자아보다 반드시 약하다고는 할 수 없음을 강조하고 싶다...예를 들어보자. 배에 짐을 실을 때, 배가 작더라도 작은 짐을 실으면 문제가 없다...하지만 아무리 배가 크다 해도 짐이 너무 무거우면 약간은 장애를 일으킬 것이다...배와 짐을 크기의 관계는 사람의 소질이나 환경에 따라 달라진다..." (책 '콤플렉스', 가와이 하야오 저)

 

3. '콤플렉스'는 '개인적'인 문제가 아닐 수 있다.

 

누군가에게 "콤플렉스가 있다."고 지적할 때에는, 사실 그에게 '개인적인 결점'이 있다는 의미인 경우가 많다. 그러나 정말 누군가에게 '콤플렉스'가 존재한다면, 당신이 그 누군가와 가까운 사이일수록 어떤 역할을 해야 할지 모른다. 이유는 간단하다. 우리는 콤플렉스를 '스스로의 자아를 발달시켜서' 해결하기도 하지만, '나를 보완해주는 다른 사람을 찾아 긴밀한 관계를 맺음으로써', 혹은 '비슷한 콤플렉스를 가진 사람끼리 유대감을 형성함으로써' 해결하려 들기 때문이다. '자기에게 없는 점을 서로에게 발견해' 결혼한 부부라든지, '비슷한 사정을 가진' 불량 서클 청소년들이 그 예다. 관계에 영향을 받기도 하지만, 관계 형성에 적극적으로 영향을 행사하기도 하는 게 콤플렉스인 셈이다.

 

문제는 관계가 콤플렉스의 원인이건, 콤플렉스가 관계의 원인이건, 무언가를 많이 공유하는 사이일수록 그 사이가 서로가 가진 콤플렉스의 원인이거나 결과일 수 있다는 사실 그 자체다. 이럴 경우 서로의 관계에서 생기는 문제점, 갈등 등을 상대방의 자질 탓으로 돌리기보단 '자신과 상대방의 콤플렉스'가 보내는 신호로 받아들이고 상대방과 새로운 관계를 개척하는 태도가 필요할 수 있다고 저자는 말한다. 콤플렉스 자체가 병은 아니지만, 이를 '예외'로 만들고 '병'처럼 여기는 태도가 오히려 진짜 병을 불러올 수 있기 때문이다.

 

"마음의 상보성은 한 사람의 마음 내부에서만 일어나는 것이 아니라, 두 사람(또는 다수) 사이에 일어날 수도 있다...각각의 사람이 자신의 마음 속에 있는 콤플렉스를 발전시켜가는 대신에 그것을 보완해주는 사람과 맺어짐으로써 손쉽게 상보성을 획득하는 것이다. 그런데 요즘 들어 이런 부부가 40대에 접어들고 나서 이혼 문제로 상담하러 오는 일이 갑자기 많아졌다...결혼해서 20년 가까이 등을 맞대고 지내지 말고 서로 마주보고 대화를, 말하자면 자신의 콤플렉스와 대결을 시도했어야만 했다. 또는 마흔 살이 되어서야 비로소 그것을 깨달았다면 인생의 후반을 향해가는 길을 둘이서 함께 나아갈 수 있게끔 새로운 관계를 개척했어야만 했다." (책 '콤플렉스', 가와이 하야오 저)

 

 

+ Recent posts