SLOOP

프로그래밍 보안 가이드 2006

· 14년 전 · 1121
오래된 자료이긴 한데 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 
|
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
14년 전 조회 728
14년 전 조회 525
14년 전 조회 909
14년 전 조회 2,172
14년 전 조회 1,637
14년 전 조회 1,456
14년 전 조회 2,885
14년 전 조회 2,003
14년 전 조회 958
14년 전 조회 1,029
14년 전 조회 988
14년 전 조회 1,085
14년 전 조회 564
14년 전 조회 879
14년 전 조회 1,022
14년 전 조회 2,576
14년 전 조회 898
14년 전 조회 628
14년 전 조회 642
14년 전 조회 2,994
14년 전 조회 777
14년 전 조회 1,492
14년 전 조회 1,492
14년 전 조회 689
14년 전 조회 1,403
14년 전 조회 793
14년 전 조회 911
14년 전 조회 1,873
14년 전 조회 1,581
14년 전 조회 2,185
14년 전 조회 911
14년 전 조회 791
14년 전 조회 2,183
14년 전 조회 814
14년 전 조회 907
14년 전 조회 2,036
14년 전 조회 1,049
14년 전 조회 955
14년 전 조회 708
14년 전 조회 953
14년 전 조회 1,962
14년 전 조회 527
14년 전 조회 2,491
14년 전 조회 865
14년 전 조회 560
14년 전 조회 569
14년 전 조회 830
14년 전 조회 740
14년 전 조회 638
14년 전 조회 1,122
14년 전 조회 560
14년 전 조회 1,238
14년 전 조회 1,600
14년 전 조회 573
14년 전 조회 707
14년 전 조회 548
14년 전 조회 702
14년 전 조회 1,139
14년 전 조회 826
14년 전 조회 943
14년 전 조회 767
14년 전 조회 919
14년 전 조회 509
14년 전 조회 1,320
14년 전 조회 674
14년 전 조회 1,426
14년 전 조회 8,167
14년 전 조회 801
14년 전 조회 1,636
14년 전 조회 1,360
14년 전 조회 1,642
14년 전 조회 1,976
14년 전 조회 578
14년 전 조회 719
14년 전 조회 6,505
14년 전 조회 702
14년 전 조회 640
14년 전 조회 1,787
14년 전 조회 695
14년 전 조회 688
14년 전 조회 2,154
14년 전 조회 760
14년 전 조회 3,657
14년 전 조회 3,778
14년 전 조회 1,135
14년 전 조회 727
14년 전 조회 1,407
14년 전 조회 650
14년 전 조회 979
14년 전 조회 560
14년 전 조회 7,385
14년 전 조회 1,060
14년 전 조회 480
14년 전 조회 630
14년 전 조회 1,340
14년 전 조회 774
14년 전 조회 610
14년 전 조회 737
14년 전 조회 662
14년 전 조회 470
🐛 버그신고