자바스크립트에서 서버 시간 가져오기


서버 시간을 가져오는건 당연히 서버 언어가 제공하는 기능을 사용하는게 정석입니다.
하지만 보안의 문제이거나 특별한 이유에서
프론트엔드로 서버시간을 제공해줄 수 없는 경우도 있습니다.

그래서 오늘은 자바스크립트에서 서버 시간을 가져오는 방법을 알아보려고 합니다.
하지만 프론트에서 서버시간을 얻는건 보안상 취약하기 때문에
가벼운 유효성 체크나 중요하지 않은 로직에 이용되는게 맞습니다.



예전 회사에서 해당방식으로 서버시간을 얻어 DB에 기록하는 방법의 대해
보안 취약점으로 지적했으나 무시하고 넘어가 결국 사고가 터진걸 봤네요..


▼해당 URL에 공개된 소스가 제가 만들어놓은 소스보다 정리가 잘되어 있어
참조하여 대체 하겠습니다.


▼해당 소스를 돌려보자 로컬 HTML 환경에서 돌리면 확인할 수 없으니
서버를 띄워서 확인해야 한다.
<script type="text/javascript">
    <!--
    var xmlHttp;
    function srvTime() {
        try {
            //FF, Opera, Safari, Chrome
            xmlHttp new XMLHttpRequest();
        }
        catch (err1) {
            //IE
            try {
                xmlHttp new ActiveXObject('Msxml2.XMLHTTP');
            }
            catch (err2) {
                try {
                    xmlHttp new ActiveXObject('Microsoft.XMLHTTP');
                }
                catch (eerr3) {
                    //AJAX not supported, use CPU time.
                    alert("AJAX not supported");
                }
            }
        }
        xmlHttp.open('HEAD'window.location.href.toString()false);
        xmlHttp.setRequestHeader("Content-Type""text/html");
        xmlHttp.send('');
        return xmlHttp.getResponseHeader("Date");
    }

    var st srvTime();
    var date new Date(st);
    //-->
</script>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Server date/time</title>
    <script language="javascript" src="serverDate.js"></script>
</head>
<script language="javascript">
    var localTime new Date();
    document.write("Local machine time is: " localTime "<br>");
    document.write("Server time is: " date);
</script>
<body>
</body>



▼확인결과 현재 서버에 시간을 잘가져오고 있다.




마무리

어떤 경우에도 서버 언어에서 시간을 가져오는게 좋습니다. 


댓글을 달아 주세요