잊지 않겠습니다.

VS 2010 setting

기타 자료들 2010. 8. 25. 16:09
좀 색이 맘에 안들긴하지만... 까만 배경에 EnvyCode R을 사용하는 setting이 얼마 없어서.;;

Posted by Y2K
,

WMI Execute example

.NET Framework 2010. 8. 25. 15:26
WMI query를 이용해서 remote computer에 대한 system 작업을 할 때, .net으로 하는 방법 간단 예제.


try
{
    ConnectionOptions connectionOptions = new ConnectionOptions()
                                                {
                                                    Impersonation = ImpersonationLevel.Impersonate,
                                                    Username =
                                                        string.Format("{0}\\{1}", txDomain.Text,
                                                                    txUserName.Text),
                                                    Password = txPassword.Text,
                                                    Authentication = AuthenticationLevel.Default,
                                                    EnablePrivileges = true
                                                };

    ManagementScope scope = new ManagementScope(txNamespace.Text, connectionOptions);
    ObjectQuery query = new ObjectQuery(txQuery.Text);
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
    ManagementObjectCollection managementObjects = searcher.Get();

    txResult.Text = string.Empty;

    StringBuilder sb = new StringBuilder();
    foreach (var o in managementObjects)
    {
        System.Diagnostics.Debug.WriteLine(o.ToString());
        sb.AppendLine(o.ToString());
    }
    txResult.Text = sb.ToString();
    managementObjects.Dispose();
    searcher.Dispose();
}
catch(Exception ex)
{
    txResult.Text = string.Empty;
    txResult.Text = ex.Message + Environment.NewLine + ex.StackTrace;
}
Posted by Y2K
,

Sysprep 테스트

.NET Framework 2010. 8. 13. 15:31

<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
    <settings pass="specialize">
        <component name="Microsoft-Windows-Shell-Setup" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State (http://schemas.microsoft.com/WMIConfig/2002/State) " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance (http://www.w3.org/2001/XMLSchema-instance) ">
            <ProductKey>6HFGM-3KFJB-HFQJW-793WD-GKQHY</ProductKey>
        </component>
    </settings>
    <settings pass="generalize">
        <component name="Microsoft-Windows-Security-Licensing-SLC" processorArchitecture="x86" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State (http://schemas.microsoft.com/WMIConfig/2002/State) " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance (http://www.w3.org/2001/XMLSchema-instance) ">
            <SkipRearm>1</SkipRearm>
        </component>
    </settings>
</unattend>
Posted by Y2K
,
javascript에서 자주 class화 시켰으면 좋을것 같은데.. 하는 일이 자주 벌어진다.
일단 기본 목적이 화면에 표시되는 방법을 제어하는 경우가 더 많기 때문에, 기존 WinForm의 객체들처럼 각각 만들어져있다면 사용하기에 정말 편할 것 같아서 class와 상속 들에 대해서 알아보게 되었다.

먼저, 기본적으로 javascript에서는 class라는 키워드는 존재하지 않는다. function 키워드를 이용해서 객체를 선언 하게 된다.

1. class의 선언

function Product() {    this.name = '';    this.price = 0;    this.SetValues = function(name, price) {        this.name = name;        this.price = price;    };            this.ShowName = function(id) {        this.ShowAlert();        $('#' + id).html('Product' + this.name);    };        this.ShowAlert = function() {        console.debug('this is product message ' + this.name);    };}

class의 선언은 매우 단순한것이. 일반적인 함수의 형태를 취하면서 만들어지게 된다. prototype을 선언해서 만드는 법도 가능하지만, 코드의 가독성이 이게 더 편한 것 같아서. 이 방법을 주로 사용하는 것이 더 나아보인다.
private method나 private property의 경우에는 var 키워드를 이용해서 만들어주고, public의 경우 this 키워드를 이용해서 선언할 수 있다.

2. class의 상속

function KrProduct() {    Product.call(this);    this.ShowAlert = function() {        console.debug('this is krProduct message ' + this.name);            };}

call method를 이용해서 class를 상속한다.
override 를 하고 싶은 경우, 기존의 method를 동일하게 재 선언해주면 된다.
주의점은 javascript의 객체를 만들때는 protected가 없다는 것이다. 상속된 객체에서 절대로 private method나 property는 사용하지 못한다. 이를 고려해서 만들어줘야지 된다. (객체의 캡슐화에는 매우 불리한 것 같다.)

3. 실행 결과.
$(function() {    $('#testButton').click(function() {        var product = new Product();        var product2 = new KrProduct();        var product3 = new KrProduct();        product.SetValues("Product Name", 0);        product2.SetValues("Product2 Name", 1);        product3.SetValues("Product3 Name", 2);         product.ShowName('testDisplay');        product2.ShowName('testDisplay2');        product3.ShowName('testDisplay3');    });})


override 시킨 method가 차례대로 실행되는 것을 알 수 있다.

Posted by Y2K
,
Controller 객체를 사용해서 각 method를 테스트하는 방법은 매우 뛰어난 테스팅 방법이지만, 불행하게도 Session 및 Identify에 대한 내용을 같이 테스팅 하는 것은 불가능하다. 특히, Session에 Wizard Data 또는 사용자에 따른 개인 정보를 저장하고 있는 경우에는 Controller 객체만을 사용하는 것은 불가능하다.

그래서, Mock을 이용해서 HttpContext를 구성하고, 구성된 HttpContext를 ControllerContext로 구성하여 Controller를 사용하게 되면 위와 같은 문제를 모두 해결 할 수 있다.


public class FakeSession : HttpSessionStateBase
{
    private readonly SessionStateItemCollection _sessionItems;
    public FakeSession(SessionStateItemCollection sessionItems)
    {
        _sessionItems = sessionItems;
    }

    public override void Add(string name, object value)
    {
        _sessionItems[name] = value;
    }

    public override int Count
    {
        get
        {
            return _sessionItems.Count;
        }
    }

    public override IEnumerator GetEnumerator()
    {
        return _sessionItems.GetEnumerator();
    }

    public override NameObjectCollectionBase.KeysCollection Keys
    {
        get
        {
            return _sessionItems.Keys;
        }
    }

    public override object this[string name]
    {
        get
        {
            return _sessionItems[name];
        }
        set
        {
            _sessionItems[name] = value;
        }
    }

    public override object this[int index]
    {
        get
        {
            return _sessionItems[index];
        }
        set
        {
            _sessionItems[index] = value;
        }
    }
    public override void Remove(string name)
    {
        _sessionItems.Remove(name);
        }
}

protected T GetContextedController(T controller, string userName, FakeSession sessionState) where T : ControllerBase
{
    //Register Route
    RouteCollection routes = new RouteCollection();
    MvcApplication.RegisterRoutes(routes);

    //Build Mock HttpContext, Request, Response
    var mockHttpContext = new Moq.Mock();
    var mockRequest = new Moq.Mock();
    var mockResponse = new Moq.Mock();

    //Setup Mock HttpContext 
    mockHttpContext.Setup(x => x.Request).Returns(mockRequest.Object);
    mockHttpContext.Setup(x => x.Response).Returns(mockResponse.Object);
    mockHttpContext.Setup(x => x.Session).Returns(sessionState);

    if(string.IsNullOrEmpty(userName))
    {
        mockHttpContext.Setup(x => x.User.Identity.IsAuthenticated).Returns(false);
        mockRequest.Setup(x => x.IsAuthenticated).Returns(false);
    }
    else
    {
        mockHttpContext.Setup(x => x.User.Identity.Name).Returns(userName);
        mockHttpContext.Setup(x => x.User.Identity.IsAuthenticated).Returns(true);
        mockRequest.Setup(x => x.IsAuthenticated).Returns(true);
    }
    mockRequest.Setup(x => x.ApplicationPath).Returns("/");

    // Build Request Context
    var ctx = new RequestContext(mockHttpContext.Object, new RouteData());
    controller.ControllerContext = new ControllerContext(ctx, controller);
    return controller;
}


사용 방법은 다음과 같다.
[Test]
public void Start()
{
    _controller = new VirtualMachineController();
    SessionStateItemCollection sessionItemCollections = new SessionStateItemCollection();
    sessionItemCollections[SessionConstants.Account] = _account;
    sessionItemCollections[SessionConstants.ZoneList] = tempZoneList;

    _session = new FakeSession(sessionItemCollections);
    _controller = GetContextedController(_controller, LocalConf.AccountName, _session);
    _controller.Start("tempVmName");
}
Posted by Y2K
,
회사에서 신규 프로젝트에서 Spring.NET을 사용하기로 해서, 간단히 자료 찾아보고 공부. 끄적끄적.
개인적으로는 .NET MVC에는 Castle이 가장 어울리는 것이 아닌가 싶은데, 일단 제일 유명하고, 잘 만들어져있다는 Spring의 .NET 포팅버젼을 공부해놓는 것도 도움이 되겠다는 생각으로 시작하게 되었다.

먼저, WebService, Console Application, Web등 Context 소비자측에서 사용될 Interface를 선언한다. Interface를 통해서 구성이 되고, IoC로 구성이 될 경우 Interface의 변경은 Context 소비자의 변경을 가지고 올 수 있기 때문에 Interface의 변경에는 매우 주의를 요하게 된다.
    public interface IVirtualMachine
    {
        string CreateVM(string description, string hwProfileTextKey, string vmiName, string zoneTextKey,
            string accountName, string sequrityGroupName);
        string GetVMConfiguration(string vmName);
        string StartVM(string vmName);
        string ShutdownVM(string vmName);
        string RestartVM(string vmName);
        string StopVM(string vmName);
        string DeleteVM(string vmName);
        string SetMemorySize(string vmName, int memorySize);
        string migrateVM(string vmName, string toHostName);
        string GetVMCurrentUsage(string vmName);
        string GetPasswordData(string vmName);
    }

그리고, Interface를 상속받는 Context를 구성한다.
    public class VirtualMachine : IVirtualMachine
    {
        #region IVirtualMachine Members

        public string CreateVM(string description, string hwProfileTextKey, string vmiName, string zoneTextKey, string accountName, string sequrityGroupName)
        {
            string message = string.Format("CreateVM : {0}", description);
            return message;
        }

        public string GetVMConfiguration(string vmName)
        {
            string message = string.Format("GetVMConfiguration from Common Service : {0}", vmName);
            return message;
        }

        public string StartVM(string vmName)
        {
            throw new NotImplementedException();
        }

        public string StopVM(string vmName)
        {
            throw new NotImplementedException();
        }

        public string ShutdownVM(string vmName)
        {
            throw new NotImplementedException();
        }

        public string RestartVM(string vmName)
        {
            throw new NotImplementedException();
        }

        public string DeleteVM(string vmName)
        {
            throw new NotImplementedException();
        }

        public string SetMemorySize(string vmName, int memorySize)
        {
            throw new NotImplementedException();
        }

        public string migrateVM(string vmName, string toHostName)
        {
            throw new NotImplementedException();
        }

        public string GetVMCurrentUsage(string vmName)
        {
            throw new NotImplementedException();
        }

        public string GetPasswordData(string vmName)
        {
            throw new NotImplementedException();
        }

        #endregion
    }

Config 파일에 각 Context의 선언을 넣는다.

그리고, 사용할 소비자에서는 Spring.Context.Support.ContextRegistry 를 통해서 각 Context를 얻고, Object들을 Interface를 통해서 얻어 사용한다. 이때, 객체를 얻어와서 사용해도 되지만, 객체를 얻어오게 되면 Context의 변경이 있을때, 일관성이 떨어지고, 강한 결합으로 연결되기 때문에 n-Tier 구성에 어울리지 않게 된다. 반드시 인터페이스를 통해서 사용을 해야지 된다.

그리고, Context가 변경되게 되는 경우에는 다른 이름으로 Context를 추가하고, 정해진 Context Name을 이용해서 사용해주면 된다. 그리고, 생성자에 입력값이 있는 경우 다음과 같이 사용하면 된다.



가장 좋은 방법으로 생각되는 것은 appSettings에 사용될 Context Object Name을 추가하면 Context의 Re-Build없이 Context Object를 변경해서 사용하는 것이 가능하기 때문에 이 방법이 가장 좋을 듯 하다.



다음은 Context 소비자 코드이다.
static void Main(string[] args)
{
    string contextName = System.Configuration.ConfigurationManager.AppSettings["VirtualMachine"];
    
    IApplicationContext context = ContextRegistry.GetContext();
    IVirtualMachine vmService = (IVirtualMachine) context.GetObject(contextName);

    string result = vmService.GetVMConfiguration("YKYOON");
    Console.WriteLine(result);
}





Posted by Y2K
,
[책광고 릴레이] 삼성을 생각한다

주 요 일간지에서 삼성의 눈치를 보며 광고를 거절한 책....
우리나라의 지배자가 삼성이 되지 않기를 바라며, 일본 애니 등에서 묘사된 "거대 기업에 지배당하는 비참한 미래"를 막기 위해서...

저도 책광고 릴레이에 동참합니다.

Posted by Y2K
,
원본은 : http://blog.ohmynews.com/joasay/282113
영문 이메일은 보통 영문의 편지문장과 몇 가지 차이가 있다.




가장 다른 점은 인포멀하고 간결한 문체일 것이다. 짧고, 친밀감을 담는 문체이지만 받는 사람에게 실례가 되지 않게 쓰지 않으면 안 된다. 이러한 어려움 때문에 지금까지는 영문으로 전자메일을 쓰려고 생각해도 부담이 되어서 쓰기를 망설였던 사람들이 많을 것이다. 그런 분들을 위해서 영문 e-mail에 자주 나오는 편리한 표현을 오랜 작업끈에 정리해 보았다.


이러한 표현을 참고하셔서 이제는 주저하지 마시고 짧아도 괜찮으니 영문 e-mail를 한번 써 보자.

자기 소개의 표현
I'm sending this mail from Seoul, Korea.
한국의 서울에서 메일을 보냅니다.
This is my first mail to send to this mailing list.
이 메일링리스트에 처음으로 메일을 보냅니다..
I work for a multimedia company that makes educational software.
교육용 소프트를 만드는 회사에서 근무하고 있습니다.
I am Bnghee Han from Daejeon-City, Korea.
한국의 대전시에서 살고 있는 한 봉희라고 합니다.





인사 표현
How have you been (doing)? Nothing much new here.
안녕하십니까. 이곳은 별다른 일없습니다.
I'm happy to join this movie lover's mailing list.
이 영화 동호인 메일일 리스트에 가입되어 영광입니다.
I sent e-mail to you last weekend but I guess I sent it to the wrong address.
제가 지난주에 메일을 보냈습니다만 잘못된 주소에 보낸 것 같네요.





감사의 표현
Thanks for your quick reply(Response).
빠른 답장 감사합니다.
Thank you for your e-mail dated April 15, 2001.
2001년 4월 15일자 메일 고맙습니다.
If you could take a few minutes to answer our questions, we would really appreciate it.
저희들의 질문에 시간을 조금만 내서 답변을 해 주신다면 감사하겠습니다.
Thank you in advance for your help.
아무쪼록 부탁 드립니다. (미리 감사드립니다. )





사죄의 표현
Sorry I didn't write to you earlier.
좀 더 빨리 쓰지 못해 죄송합니다.
I apologize for not having gotten into contact with you sooner.
좀 더 빨리 연락을 드리지 못해서 죄송합니다.
Sorry for any confusion and it is a pleasure doing business with you.
혼란스럽게 해서 죄송합니다. 그리고 당신과 비즈니스를 같이하게 되어 기쁩니다.





제안의 표현
I'd like to make a proposal: why don't we write our messages all in English?
제안이 있습니다. 우리는 왜 메시지를 전부 영어로 쓰지 않습니까?
Are you interested in going to a baseball game with me this weekend?
이번 주말에 저와 야구하러 가는 것에 관심이 있습니까?
Why don't you stop by Korea if you are coming to Japan?
일본에 온다면 한국에도 들러 주세요!


문의의 표현
Does anyone know if those movies are available on videotape?
이러한 영화가 비디오테이프로 가능할지 누가 모릅니까.
I need your help.
도와주세요.
When can I expect a reply from you?
언제 답장을 받아 볼 수 있을까요!.
I just want to check if you have received my mail of April 23rd.
4월 23일날 보낸 나의 메일을 받으셨는지 확인하고 싶습니다.
Is there anybody out there who has the last month's English Network?
누군가 지난달의 영어네트워크를 갖고 계시지 않습니까?




답변의 표현
I am responding to your job opening announcement in the Korea Times dated April 5th.
4월 5일자의 코리아 타임즈 구인 광고 건으로 연락하고 있습니다.
Here is my answer to your question of April 1st.
4월 1일자의 당신 질문에 대한 답변입니다.
I wish I could go, but I have already made plans on the 12th.
갈 수 있으면 좋겠습니다만, 벌써 12일에는 계획이 있습니다.
Hope this helps.
이것이 도움이 되길 기대합니다.





의뢰의 표현
I hate to ask you this, but would it be possible for us to stay with you?
이러한 것을 부탁드리기가 싫지만 당신과 함께 머무르는 것이 가능할까요?
Let me know the results of your entrance exams in the next mail.
다음 메일로 입시의 결과를 가르쳐 주세요.
Could you help me with my survey?
나의 조사에 답해 주실 수 있겠습니까?
May I ask a favor of you?
부탁을 해도 될까요?
I am looking for key-pals in Mexico, Spain or South America.
멕시코와 스페인과 남아메리카에서 전자메일로 펜팔할 상대를 찾고 있습니다.
We would like to e-mail with an elementary school class in Italy.
이탈리아의 초등학교 클래스와 전자메일을 교환을 하고 싶습니다.
Please respond to
iambong@netsgo.com
연락은
iambong@netsgo.com 로 주세요!





확인의 표현
Did you mention you wanted to start this business by March this year or March next year?
이 비즈니스를 금년 3월까지 시작하기로 언급했습니까? 아니면, 내년 3월까지라고 언급했습니까?.
Did you also say we need a unix machine for this?
당신은 또한 UNIX의 컴퓨터가 필요하다고 말했습니까?





감정의 표현
I'm a bit disturbed by your reply to our new product.
저희들의 상품에 대해서 당신의 답변에 놀랐습니다.
I'm so glad/happy that you liked our gift.
당신이 우리의 선물을 좋아하시니 기쁩니다.
I'm terribly sorry to hear of Dr. Johnson's sudden death.
죤슨 선생님의 갑작스런 죽음을 듣고 놀랐습니다. 명복을 빕니다.





축하의 표현
I wish you the best of luck /good luck with your final exams.
기말 시험에서의 행운을 빕니다.
How are you feeling? I heard you couldn't come to work for several days because you got sick.
상태는 어떻습니까. 병이 들어 몇 일간 출근을 못한다고 들었습니다.
Have a good rest until you feel completely well.
완전히 좋아 질때가지 충분히 휴양을 취하세요.
I'm really glad to hear you got promoted.
당신의 승진을 진심으로 축하드립니다.
Congratulations on your marriage!
결혼 축하합니다.
You deserve to get promoted.
당신의 승진은 당연합니다.





e-mail 주세요
E-mail me or call me collect, please.
전자메일이나 콜렉트콜로 연락 주세요.
Hope to here from you soon.
당신으로부터 빠른 답장을 기다리고 있습니다.
I'm looking forward to receiving your reply at your earliest convenience.
가능한 한 빨리 답장을 받을 수 있기를 학수 고대하고 있습니다.
Please send responses by the end of April.
4월말까지 답장을 주세요.





마지막 한마디
I'll tell you more about it in my next message.
다음 메일로 좀 더 이야기를 하겠습니다.
I'll keep in touch.
연락을 합시다.
Please give my best regards to your boss.
당신의 상사에게 안부 전해 주십시오.


아래는 e-mail에서 자주 나오는 약어의 예다.

네트워크를 이용하는 User들은 가능한 한 문장을 짧게 쓰기 위해서 이러한 특수한 약어를 낳았다. 익숙해질 때까

지는 너무 자주 사용하는 것은 권장하지 않지만, 읽었을 때 어떠한 의미인지 정도를 이해할 수 있도록 알아두자.

그리고 한 두개 정도는 이메일에 사용해 보아도 좋을 것이다.





기본적인 약어



P. S. / Post Script 추신
BTW / By the way 그런데
ASAP / As soon as possible 가능한 한 빨리
co. / company 회사
et al. / (et alia 라틴어로부터) and others 그 외
i.e. / (id est 라틴어로부터) that is 즉
e.g. / (exempli garatia 라틴어로부터) for example 예를 들면





화재를 바꾼다.



OBTW / Oh, By The Way 그런데
OTOH / On The Other Hand 한편
AFAIC / As Far As I'm Concerned 나에 관해서 말하면
IOW / In Other Words 즉
IAC / In Any Case 어쨌든





마지막 인사



CIAO / Goodbye (이탈리아어) 안녕
CUL / See You Later 다시 또 보자
CWYL / Chat With You Later 또 이야기합시다
TTYL / Talk To You Later 또 이야기하네요
BFN / Bye for now 오늘은 이 근처로





컴퓨터 용어



HDD / Hard Disk Drive 하드 디스크
Msg / Message e-mail문장
Cc / carbon copy 참조(같은 것을 다른 사람에게도 보내는 기능)
Bcc / Blind carbon copy 숨은 참조(상대에게는 알리지 않고 같은 것을 다른 사람에게도 보내는 기능)
KBD / Keyboard 키보드
Snail Mail / The U.S. Postal Service 우편(우편은 전자 메일에 비해 달팽이처럼 늦기 때문에)





프로만 아는 생략어



IITYWTMWYKM / If I Tell You What This Means Will You Kiss Me?
HHO 1/2 K / Ha, Ha, Only Half Kidding 좀 농담을 했다니까!
ROFLASTC / Rolling On Floor Laughing And Scaring The Cat! 배꼽이 빠지게 웃는다
WYSIWYG / What You See Is What You Get 모니터에 보이는 대로 인쇄된다
IMHO / In My Humble Opinion 사견을 말하면
IMO / In My Opinion  생각건대
FYI / For Your Information 도움이 될꺼라고 생각해





상대를 어리석게 하는 것



KISS / Keep It Simple, Stupid 간단하게 못하니, 바보야!
IMNSHO / In My No So Humble Opinion 말하게 해주지만
LLTA / Lots and Lots of Thunderous (or Thundering) Applause 박수 갈채
RTFM / Read The F*cking Manual! / Read The Flaming Manual! 메뉴얼을 읽어라.





위트



HAK / Hugs And Kisses (꼭 껴안고 키스해줄 정도로) 훌륭하다!
ROFL/ROTFL / Rolling On Floor Laughing! 박장대소하다
HHOK / Ha, Ha, Only Kidding 농담이야.
ONNA / Oh No, Not Again 좀 기다려요.
OZ / Australia 오스트레일리아(사람)





감사



THANX / TNX
Thanks 고맙습니다
TIA / Thanks In Advance 잘 부탁드립니다





기 타



HTH / Hope this Helps! 이것이 도움이 될거야!
FYA / For Your amusement 이것으로 즐기세요
FYI / For your information 정보입니다
WT / Without Thinking 너무 생각하지 말고


감정을 그림 문자로 표현하는 마크도 생략 기호의 하나이다.

적절히 사용하면 매우 효과적이다. 많이 사용하는 것을 모아 보았다.


^_^)
smile

(^_^;
embarrassed

\^_^/
banza-i

:-)
Happy

:@
what?

:D
Laughter

:I
Hmmm...

:(
Sad

:O
Yelling

:, (
Crying

:*
Kisses

(:-)
smiley big-face

;-)
wink

-)
hee hee

-<
mad
Posted by Y2K
,
모든 입력은 위조될 수 있다. - 사용자의 입력을 신뢰하지 말아라.

변조 가능한 모든 데이터들:
  • GET QueryString
  • POST로 전송 가능한 Data
  • Cookie
  • HTTP Header에 저장된 데이터
XSS(Cross-site scripting)
: Web Application에 피해를 입히는 가장 유명하고 널리 알려진 방법
Input Message를 이용해서 Web Page에 공격자의 Form 또는 Javascript를 삽입하여 공격하는 방법

* 대응책 : 사용자가 제공한 모든 데이터는 인코딩을 통해 출력한다.

* Html.Encode(string message)를 통해 ASP .NET MVC에서 가능하다. MVC2에서는 <%: %>으로 간단히 표현 가능하다.
* ASP .NET에서 제공되는 ValidationRequest를 이용하는 방법
 - HTML, Javascript와 유사한 모든 입력을 차단한다.
 - 사용자의 입력이 매우 제한되기 때문에 추천되지 않는 방법이다.

Session Hijacking
: Session ID cookie(ASP.NET_ SessionID로 만들어진다.)를 저장하고, 자체 브라우저를 이용해서 신원을 위장 가능하다.

* 대응책
  - Client IP를 Session의 값에 같이 저장해서, Session을 발급한 Client를 재확인하는 절차를 거친다.
  - HttpOnly flag를 설정한다. 이 경우, Cookie를 javascript를 이용해서 Hijacking 하는 것이 불가능하게 된다.

CSRF
: 사용자가 정상적인 로그인을 거친 이후에 다른 사이트에 Session이 유지된 상태로 이동한 이후 타 사이트에서 값을 넘기는 것으로 사용자의 정보를 훔쳐갈 수 있다.

* 대응책
  - 사용자에게 특화된 토큰이 보안적인 요청안에 포함되도록 한다. ASP .NET MVC에서는 이러한 기법을 이미 사용하고 있다.

  <%using(Html.BeginForm()) { %>
      <%= Html.AntiForgeryToken() %>
  <%}%>

  [AcceptVerbs(HttpVerbs.Post)][ValidateAntiForgeryToken]
  public ActionResult SubmitUpdate()

SQL Injection
: SQL Query문을 Query String 또는 POST 데이터에 넣어서 데이터를 위변조한다.

* 대응책
  - 입력을 Encoding해서 방어
  - 매개변수를 사용하는 Query를 이용해서 방어
  - ORM Mapping을 이용해서 방어 (LINQ SQL, ASP .NET Entity Framework, NHibernate etc..)


Posted by Y2K
,
wrong javascript in jquery
<div id="mylinks">
    <a href="#" onclick="if(confirm('Follow the link?')) location.href='/someUrl1';">Link1</a>
    <a href="#" onclick="if(confirm('Follow the link?')) location.href='/someUrl2';">Link1</a>
</div>

good javascript in jquery
<div id="mylinks">
    <a href="/someUrl1">Link1</a>
    <a href="/someUrl2">Link2</a>
</div>

<script type="text/javascript">
    $("mylinks a").click(function() {
        return confirm('Floow the links?');
    });
</script>

Javascript를 사용할 때 '튀지 않는' Javascript를 만드는 방법
  * Javascript를 전혀 사용하지 않으면서 응용프로그램이나 기능을 구축해얒 한다. 실행 가능한 기능들을 채택하고 일반적인 HTML/CSS의 한계를 받아드린다.
  * 원 markup을 건드리지 않는 범의 한에서 Javascript를 사용한다. 그리고, 되도록 Javascript를 별도의 파일로 분리하자. 개별적으로 인식이 가능하고, 관리할 수 있는 방법을 제시해야지 된다.

Posted by Y2K
,