'2008/05/05'에 해당되는 글 2건

  1. 2008.05.05 First Line of Defense for Web Applications..
  2. 2008.05.05 C/C++에서 integer변수 swap 방법 비교.. (3)
ASP.NET 환경에서 안전한 웹 어플리케이션을 만드는데 알아두면 좋은 내용들을 다루고 있다.. 본질적인 내용은 어느 개발환경에서든 모두 고려해볼만한 내용을 담고 있지만, 예와 설명이 ASP.NET을 기준으로 설명을 하고 있어 모든 웹개발자들이 공유하고 즐기기엔 약간 아쉬운 점이 있기는 하다.. 뭐, MS 기술자들이 모이는 블로그 사이트에 올려진 글이니 당연하기 하겠지만..

3번째 이야기에서 보면 입력값 점검을 위해 정규표현식을 사용하는 예가 나오는데, 아주 좋은 방법이라 생각한다.. 올바로된 값이 입력되었는지를 점검하는데 정규표현식 만큼 간결하면서도 강력한 방법이 없는데, 자바 스크립트 뿐만 아니라 많은 프로그래밍 환경에서 지원하는 방법인데 주변의 프로그래머들은 의외로 사용을 안하는 것 같다.. 왜 그럴까 좀 궁금해진다..
First Line of Defense for Web Applications - Part 1
(http://blogs.msdn.com/hackers/archive/2007/10/12/first-line-of-defense-for-web-applications-part-1.aspx)
First Line of Defense for Web Applications - Part 2
(http://blogs.msdn.com/hackers/archive/2007/10/22/first-line-of-defense-for-web-applications-part-2.aspx)
First Line of Defense for Web Applications - Part 3
(http://blogs.msdn.com/hackers/archive/2007/10/30/first-line-of-defense-for-web-applications-part-3.aspx)
First Line of Defense for Web Applications - Part 4
(http://blogs.msdn.com/hackers/archive/2007/11/12/first-line-of-defense-for-web-applications-part-4.aspx)
First Line of Defense for Web Applications - Part 5
(http://blogs.msdn.com/hackers/archive/2007/12/16/first-line-of-defense-for-web-applications-part-5.aspx
)
First Line of Defense for Web Applications - Conclusion
(http://blogs.msdn.com/hackers/archive/2008/01/06/first-line-of-defense-for-web-applications-conclusion.aspx)
4번째 이야기에서 주로 다루는 Cross Site Scripting에 대해서는 그동안 관심을 가져보지 못했었는데, 앞으로는 이 부분에 대해서도 관심을 가져야 하겠다..

5번째 이야기에서는 SQL 인젝션에 대해 지면을 할애하고 있다..

4번째, 5번째 이야기는 사실 프로그래밍 개발환경에 상관 없이 모두에게 동일하게 적용되는 내용이니 참고해보면 좋겠다.. 물론, 이 두가지 주제에 대해서는 이 글들 말고도 다른 좋은 글들이 훨씬 더 많이 있을테니 그러한 글들을 참조해도 좋다.. 아무튼 이 두 주제는 요즘 보안에서는 기본에 해당하는 내용이므로 꼭 내용을 숙지하고 프로그래밍시 반영을 해야한다..

정 시간이 없다면 맨 마지막 글인 결론 내용이라도 꼭 읽어볼 필요가 있겠다..
Posted by 미친병아리

다음 DNA에서 C/C++에서 integer변수 swap 방법 비교 (http://dna.daum.net/technote/ccpp/CPPSwap) 라는 글을 보고 옛날 생각도 나고, 요즘 CPU 환경에서는 그냥 임시변수를 선언하여 구현하는 것이 더 빠르다는 결론이 재밌어 보여 윈도우에서도 함 해봤다.. VC++ 6.0과 VS 2008을 사용하여 2개를 비교를 해봤다..

원문에서 소개된 소스코드를 아래와 같이 조금 수정해봤다.. 윈도우즈 환경에서 실행시간 위해 약간의 코드를 추가했다.. 원본 코드는 그대로 유지했음.. 새 컴파일러가 좀 더 좋아진 점이 있는가 해서 VC++ 6.0과 VS 2008을 가지고 두번 비교를 해봄..


std::swap을 사용하는 방법
std::swap : c++에서 일반적으로 가장 널리쓰이는 안전한 방법

#include "stdafx.h"

#include <iostream>
#include <algorithm>
#include <stdio.h>

#include <windows.h>

int main(void)
{
    DWORD start = ::GetTickCount() ;

    int a = 1;
    int b = 2;
    for(int i=0;i<50000000;i++)
    {
        std::swap(a,b);
    }
   
    printf("%d %d\n\n",a, b);

    DWORD end = ::GetTickCount() ;
    printf("execution time : %1.3f m/s\n", (double)(end - start) / (double)100) ;

    int temp ;
    std::cin >> temp ;

    return 0 ;
}

VC++ 6.0 : execution time : 0.630 m/s
VS 2008 : execution time : 0.630 m/s


xor를 이용한 방법
c에서 예전에 많이 사용되던 방법 임시변수를 사용하지 않아서 좋다는 장점이 있음. 오래된 CPU에서는 이 방법이 빨랐으나 최근 CPU에서는 bit operation이 느려서 그다지 좋지 않다고 알려져있음.

#include "stdafx.h"

#include <iostream>
#include <algorithm>
#include <stdio.h>

#include <windows.h>

#define SWAP(a,b) { if (a!=b) { a^=b; b^=a; a^=b; }}

int main(void)
{
    DWORD start = ::GetTickCount() ;

    int a = 1;
    int b = 2;
    for(int i=0;i<50000000;i++)
    {
        SWAP(a,b);
    }
   
    printf("%d %d\n\n",a, b);
   
    DWORD end = ::GetTickCount() ;
    printf("execution time : %1.3f m/s\n", (double)(end - start) / (double)100) ;
   
    int temp ;
    std::cin >> temp ;
   
    return 0 ;
}

VC++ 6.0 : execution time : 0.940 m/s
VS 2008 : execution time : 0.940 m/s


임시변수를 이용한 방법
가장 기본적인 방법. 임시변수를 사용한다는 단점이 있음.

#include "stdafx.h"

#include <iostream>
#include <algorithm>
#include <stdio.h>

#include <windows.h>

#define SWAP(a,b) { int t=a; a=b; b=t; }

int main(void)
{
    DWORD start = ::GetTickCount() ;

    int a = 1;
    int b = 2;
    for(int i=0;i<50000000;i++)
    {
        SWAP(a,b);
    }
   
    printf("%d %d\n\n",a, b);
   
    DWORD end = ::GetTickCount() ;
    printf("execution time : %1.3f m/s\n", (double)(end - start) / (double)100) ;
   
    int temp ;
    std::cin >> temp ;
   
    return 0 ;
}

VC++ 6.0 : execution time : 0.470 m/s
VS 2008 : execution time : 0.630 m/s


결론
실험환경 : Intel Core2 Duo T5600 1.83GHz, 2.5GB RAM

VC++ 6.0 : execution time : 0.630 m/s
VS 2008 : execution time : 0.630 m/s

VC++ 6.0 : execution time : 0.940 m/s
VS 2008 : execution time : 0.940 m/s

VC++ 6.0 : execution time : 0.470 m/s
VS 2008 : execution time : 0.470 m/s

VC++ 6.0과 VS 2008의 차이점은 없음 (옵션 변경 없이 디폴트로 실행시켰을때..)
임시변수를 사용하는 방법이 가장 빠름.. 이상한 점은 VS 2008에서는 세번째 실험방법의 결과가 실행시마다 왔다갔다 한다는 점.. 0.470과 0.630이 실행시마다 왔다갔다 함..

새로운 환경에서는 예전의 지식은 힘을 발휘하지 못하게 되는 경우가 있다.. 임시변수를 두면 좋지 않다는 생각을 가지고 살다, 이런 결론을 얻고 보면 좀 황당하다.. std::swap 보다도 임시변수를 사용하는 것이 빠르다니.. 많이 읽고 정보를 수집하고, 직접 실습을 해보고 하여 항상 최신 지식으로 무장할 필요가 있다..

Posted by 미친병아리