SLOOP

프로그래밍 보안 가이드 2006

· 2011-11-10 (목) 22:11:36 · 3013
오래된 자료이긴 한데 1윈팁에 없는거같아 올립니다.


#################################################################################################################

  3장 1절 접근통제 취약점

#################################################################################################################

□ 취약한 프로그래밍 예

<HTML>
<HEAD><TITLE> 관리자 페이지 </TITLE>
<SCRIPT language="JavaScript“>
function getCookie(name) 
var cname = name +"=";
var dc = document.cookie;

if(dc.length > 0) 
begin = dc.indexOf(cname);
if(begin != -1) 
begin += cname.length;
end = dc.indexOf(";", begin);

if(end == -1) end = dc.length;
retrun unescape(dc.substring(begin, end));


return null;

function getValue(element) 
var value = getCookie(element.name);
if(value != null) element.value = value;

</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript“>
var auth;
auth = getCookie("logged_in");

if(auth != 1) // 인증 성공 쿠키가 없을경우 Main Page로 이동
window.location = "http://victim.com/login.html";

</SCRIPT>

관리자 페이지 내용

=================================================================================================================

□ 안전한 프로그래밍 예

o ASP

<%
If myfunc_userauth(userid, userpw) <> 1 Then 'DB에서 사용자 인증을 처리
Response.write "인증 실패"
Else
If Request.ServerVariables("REMOTE_ADDR") <> "10.10.1.1" Then' 관리자 IP 확인
Response.write "관리자 IP가 아닙니다."
Response.write "인증실패“
LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록
Else
Session("logged_in") = 1'인증에 성공했을경우 logged_in 에 1의 값을 셋팅
Session("userid") = userid
Session("user_ip") = Request.ServerVariables("REMOTE_ADDR")

LogSave($userid, $user_ip)'접속에 사용한 ID 및 IP 기록

... 중략 ...
End If
End If
%>


o PHP

<?PHP
@session_start(); //세션 데이터를 초기화
if(!myfunc_userauth($userid, $userpw) || $_SERVER["REMOTE_ADDR'] != "10.10.1.1") 
//DB 에서 사용자 인증을 처리, 관리자 IP인지 확인
print "인증 실패";
LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록
exit;//인증 실패시 종료


//인증에 성공한 경우 처리 해야 되는 부분
if (!session_is_registered("logged_in"))

$logged_in = 1;//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
$user_ip = $_SERVER["REMOTE_ADDR"];
session_register("logged_in");//인증 결과 저장
session_register("userid");//사용자 ID를 저장
session_register("user_ip");//사용자 IP를 저장

LogSave($userid, $user_ip);// 접속한 사용자 ID 및 IP 기록
... 중략 ...


o JSP

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.* " %>
<%@ page import="java.sql.* " %>
<%
//HttpSession session = request.getSession(true);
String user_ip = request.getRemoteAddr();

// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth(userid, userpw) || !user_ip.equals("10.10.1.1")) 
//DB 에서 사용자 인증을 처리, 관리자 IP인지 확인
out.println "인증 실패";
LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록
else 
//인증에 성공한 경우 처리 해야 되는 부분
session.putValue("logged_in","logok");
session.putValue("userid",userid);
session.putValue("user_ip", user_ip);

LogSave(userid, user_ip);// 접속한 사용자 ID 및 IP기록
...

=================================================================================================================

#################################################################################################################

  3장 2절 부적절한 파라미터 - 소스

#################################################################################################################


□ ASP


 o 취약한 프로그래밍 예

<%
strSize = Request.QueryString("font_size")'사용자로부터 폰트의 크기 입력

Response.Write "<HTML><TITLE>사용자 입력값 검증</TITLE></HEAD>"
Response.Write "<BODY>"
Response.Write "<FONT size=" & strSize & ">글자 크기 조절</FONT>"

' ... 중략 ...

=================================================================================================================

 o 안전한 프로그래밍 예

<%
Size = Request.QueryString("font_size")' 사용자로부터 폰트의 크기 입력

Size = CInt(Size)' 입력되는 값을 정수로 형 변환

Response.Write "<HTML><TITLE>사용자 입력값 검증</TITLE></HEAD>"
Response.Write "<BODY>"
Response.Write "<FONT size=" & Size ">글자 크기 조절</FONT>"

' ... 중략 ...

=================================================================================================================

□ PHP


 o 취약한 프로그래밍 예


<?PHP
include "./inc/dbconn.inc";// DB 연결 헤더
include $language . "/head.html";// 각 국가 언어별 HTML 출력

$conn = mysql_connect($SERVER, $USER, $PASSWD);
$query = "select count(*) from main_tbl";

// ... 중략 ...

=================================================================================================================

 o 안전한 프로그래밍 예

<?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

 o 취약한 프로그래밍 예

<%@ 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>
<%
out.print("지금 사용하고 계신 ");
out.print(request.getHeader("USER-AGENT"));
out.print(" 브라우져로는 사이트 접속이 불가능 합니다.");
%>
</BODY>
</HTML>

=================================================================================================================

 o 안전한 프로그래밍 예

<%@ 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("<","<");// HTML tag가 있을 경우 제거
user_agent = user_agent.replaceAll(">",">");

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

%>
</BODY>
</HTML>

=================================================================================================================

#################################################################################################################

  3장 3절 취약한 세션 관리 (Cookie Injection) - 소스

#################################################################################################################

□ ASP


 o  취약한 프로그래밍 예

'login_ok.asp 사용자 인증 처리를 하는 스크립트
<%
  ' form 에서 사용자 id와 사용자 password를 아래 변수로 전달
  If myfunc_userauth(userid, userpw) <> 1 Then ' DB 에서 사용자 인증을 처리하는 부분
    Response.write "인증 실패"
  Else
  '인증에 성공한 경우 처리 해야 되는 부분
    Response.Cookies("logged_in") = 1
    ' 인증에 성공했을경우 logged_in 에 1의 값을 셋팅
    Response.Cookies("userid") = userid
  End If
  ...
%>

user_menu.asp' 사용자 검증이 필요한 페이지
<%
  IF Request.Cookies("logged_in") = 1 Then
    Response.write "허가된 사용자 입니다."
  Else
    Response.write "허가되지 않은 사용자 입니다."
  End If
%>

=================================================================================================================

 o 안전한 프로그래밍 예

‘login_ok.asp 사용자 인증 처리를 하는 스크립트
<%
' form 에서 사용자 id와 사용자 password를 아래 변수로 전달
If myfunc_userauth(userid, userpw) <> 1 Then ' DB 에서 사용자 인증을 처리하는 부분
Response.write "인증 실패"
Else
'인증에 성공한 경우 처리 해야 되는 부분

If Session("logged_in") <> 1 Then
Session("logged_in") = 1'인증에 성공했을경우 logged_in 에 1의 값을 셋팅
Session("userid") = userid
Session("user_ip") = Request.Servervariables("REMOTE_ADDR")
End If
End If
...
%>

‘user_menu.asp 사용자 검증이 필요한 페이지
<%
IF Session("user_ip) = Request.Servervariables("REMOTE_ADDR") AND Session("logged_in") = 1 Then
'인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
'...
Else
Response.write "허가되지 않은 사용자 입니다."
End If
%>

=================================================================================================================

□ PHP

 o 취약한 프로그래밍 예

//login_ok.php// 사용자 인증 처리를 하는 스크립트
<?PHP
// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth($userid,$userpw))  //DB 에서 사용자 인증을 처리하는 부분
print "인증 실패";
exit;//인증 실패시 종료


//인증에 성공한 경우 처리 해야 되는 부분
setcookie("logged_in", "1");//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
setcookie("userid", $userid);
...
?>

//user_menu.php// 사용자 검증이 필요한 페이지
<?PHP
if($_COOKIE["logged_in"] == 1) 
echo "인증 성공: " . $_COOKIE["userid"];

?>

=================================================================================================================

 o 안전한 프로그래밍 예

//login_ok.php// 사용자 인증 처리를 하는 스크립트
<?PHP
@session_start(); //세션 데이터를 초기화
// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth($userid,$userpw))  //DB 에서 사용자 인증을 처리하는 부분
print "인증 실패";
exit;//인증 실패시 종료

//인증에 성공한 경우 처리 해야 되는 부분
if (!session_is_registered("logged_in"))

$logged_in = 1;//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
$user_ip = $_SERVER["REMOTE_ADDR"];
session_register("logged_in");//인증 결과 저장
session_register("userid");//사용자 ID를 저장
session_register("user_ip");//사용자 IP를 저장

...
?>

//user_menu.php// 사용자 검증이 필요한 페이지
<?PHP
session_start();
if(strcmp($_SESSION['user_ip'], $_SERVER['REMOTE_ADDR']) == 0 && session_is_registered('logged_in')) 
//인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
//...
else 
|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
12-03-19 조회 3,533
12-03-16 조회 4,071
12-03-14 조회 3,955
12-03-13 조회 3,563
12-03-13 조회 4,428
12-03-12 조회 5,506
12-03-12 조회 1만
12-03-08 조회 6,077
12-03-06 조회 1.1만
12-03-06 조회 3,768
12-03-06 조회 6,291
12-03-02 조회 5,070
12-02-29 조회 3,629
12-02-27 조회 4,130
12-02-22 조회 3,682
12-02-20 조회 3,658
12-02-20 조회 6,744
12-02-01 조회 3,269
12-01-30 조회 8,807
12-01-29 조회 3,290
12-01-24 조회 3,619
12-01-21 조회 3,268
12-01-10 조회 3,733
11-12-26 조회 3,643
11-12-23 조회 5,070
11-12-23 조회 4,715
11-12-23 조회 4,331
11-12-23 조회 8,033
11-12-22 조회 3,755
11-12-17 조회 3,813
11-12-12 조회 3,213
11-12-08 조회 7,749
11-12-08 조회 3,582
11-12-07 조회 3,840
11-12-06 조회 5,595
11-12-02 조회 3,548
11-12-01 조회 3,159
11-11-30 조회 6,954
11-11-26 조회 3,900
11-11-24 조회 4,671
11-11-22 조회 3,053
11-11-22 조회 6,667
11-11-18 조회 5,096
11-11-16 조회 3,479
11-11-14 조회 3,492
11-11-12 조회 3,980
11-11-08 조회 3,306
11-11-06 조회 1만
11-11-06 조회 3,887
11-11-03 조회 5,572
11-11-02 조회 5,845
11-11-01 조회 9,354
11-10-19 조회 2,859
11-10-17 조회 2,656
11-10-10 조회 2,614
11-10-07 조회 3,389
11-10-06 조회 3,978
11-10-06 조회 2,536
11-10-02 조회 3,287
11-09-08 조회 4,299
11-09-08 조회 2,676
11-09-07 조회 2,654
11-09-02 조회 2,738
11-09-01 조회 3,684
11-08-28 조회 3,573
11-08-23 조회 3,411
11-08-22 조회 2,823
11-08-22 조회 2,422
11-08-13 조회 2,469
11-08-05 조회 2,911
11-08-03 조회 4,125
11-07-03 조회 2,612
11-06-15 조회 3,253
11-06-15 조회 3,083
11-05-15 조회 2,888
11-05-11 조회 5,619
11-04-12 조회 3,031
11-01-27 조회 3,848
11-01-26 조회 2,652
11-01-26 조회 4,493
11-01-18 조회 2,706
10-11-23 조회 2,942
10-10-24 조회 4,750
10-09-15 조회 4,440
10-09-07 조회 3,426
10-08-27 조회 4,108
10-08-20 조회 6,990
10-07-30 조회 5,673
10-06-30 조회 2,928
10-06-11 조회 4,676
10-06-11 조회 3,372
10-05-15 조회 4,215
10-05-10 조회 2,903
10-03-19 조회 5,450
10-03-05 조회 5,210
10-02-17 조회 5,645
09-11-21 조회 6,956
09-11-09 조회 4,033
09-11-04 조회 6,762
09-10-26 조회 3,880