SLOOP

프로그래밍 보안 가이드 2006

· 14년 전 · 1098
오래된 자료이긴 한데 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년 전 조회 705
14년 전 조회 497
14년 전 조회 880
14년 전 조회 2,147
14년 전 조회 1,613
14년 전 조회 1,433
14년 전 조회 2,861
14년 전 조회 1,975
14년 전 조회 933
14년 전 조회 1,005
14년 전 조회 952
14년 전 조회 1,058
14년 전 조회 542
14년 전 조회 855
14년 전 조회 1,000
14년 전 조회 2,546
14년 전 조회 868
14년 전 조회 602
14년 전 조회 617
14년 전 조회 2,967
14년 전 조회 750
14년 전 조회 1,466
14년 전 조회 1,468
14년 전 조회 661
14년 전 조회 1,378
14년 전 조회 773
14년 전 조회 881
14년 전 조회 1,846
14년 전 조회 1,551
14년 전 조회 2,157
14년 전 조회 887
14년 전 조회 772
14년 전 조회 2,157
14년 전 조회 785
14년 전 조회 892
14년 전 조회 2,013
14년 전 조회 1,022
14년 전 조회 929
14년 전 조회 677
14년 전 조회 924
14년 전 조회 1,937
14년 전 조회 505
14년 전 조회 2,465
14년 전 조회 838
14년 전 조회 540
14년 전 조회 541
14년 전 조회 808
14년 전 조회 715
14년 전 조회 613
14년 전 조회 1,099
14년 전 조회 537
14년 전 조회 1,215
14년 전 조회 1,581
14년 전 조회 547
14년 전 조회 680
14년 전 조회 527
14년 전 조회 676
14년 전 조회 1,112
14년 전 조회 805
14년 전 조회 925
14년 전 조회 749
14년 전 조회 896
14년 전 조회 483
14년 전 조회 1,293
14년 전 조회 647
14년 전 조회 1,401
14년 전 조회 8,146
14년 전 조회 780
14년 전 조회 1,616
14년 전 조회 1,343
14년 전 조회 1,619
14년 전 조회 1,957
14년 전 조회 556
14년 전 조회 698
14년 전 조회 6,488
14년 전 조회 675
14년 전 조회 616
14년 전 조회 1,768
14년 전 조회 666
14년 전 조회 667
14년 전 조회 2,134
14년 전 조회 733
14년 전 조회 3,642
14년 전 조회 3,764
14년 전 조회 1,117
14년 전 조회 705
14년 전 조회 1,380
14년 전 조회 632
14년 전 조회 953
14년 전 조회 538
14년 전 조회 7,358
14년 전 조회 1,044
14년 전 조회 455
14년 전 조회 615
14년 전 조회 1,321
14년 전 조회 756
14년 전 조회 590
14년 전 조회 712
14년 전 조회 638
14년 전 조회 450
🐛 버그신고