계산기:   calc.html


게임:   scr.html


그림판(작업중):   picture.html


파일로저장하기:   filedown.txt



'프로그래밍 > XML/HTML' 카테고리의 다른 글

그림판  (0) 2018.01.12
Visual Studio Code HTML 확장기능  (0) 2018.01.08
[HTML5] 새로운 요소와 기능  (0) 2014.12.18
자바에서 XPath 사용 하기  (0) 2013.07.07
자바에서 XQueryY 사용법  (0) 2013.07.07
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

Visual Studio 확장(Extensions) 


웹클라이언트 프로그램 작성에 사용하는 경우 사용하면 편한 확장 기능들입니다.

출처: http://bimmermac.com/1242


EXTENSIONS설명
ftp-simpleFTP를 탐색기 패널에서 트리 구조로 볼 수 있습니다. 리스트를 동기화하는 방식이라서 처음 불러오거나 갱신할 때 시간이 조금 걸립니다.
ftp-sync프로젝트 개념으로 FTP를 사용하려고 하니 ftp-simple에 비해 더 편하네요. 다만 아직 Sublime Text의 SFTP에 비할 정도는 아니고, 보완할 부분이 많은 것 같습니다.
HTML SnippetsHTML 코드를 편하게 입력할 수 있도록 돕는 기능
View in BrowserHTML 문서를 디폴트 브라우저로 띄워주는 기능입니다. 설치 후 Ctrl+F1 키를 누르면 브라우저로 뜨게 됩니다. HTML 문서만 지원하며 저장되지 않은 문서나 다른 종류의 문서는 지원되지 않는 것 같습니다.
Live HTML PreviewerHTML 문서를 편집하며 실시간으로 미리보기할 수 있습니다.
Syncing확장 기능 및 에디터 환경 설정 등을 여러 디바이스와 동기화시켜주는 기능입니다. Github의 gist에 업로드하는 방식이라서 Private하게 올릴 수가 있습니다.
Guides여는 코드와 닫는 코드 사이에 가이드 세로선을 표시합니다.
Markdown Shortcuts마크다운 문법을 단축키 혹은 마우스로 쉽게 할 수 있도록 기능을 제공합니다.
markdownlint마크다운 문법을 체크합니다.
Beutify지저분하게 정렬돼 있는 코드를 예쁘게 정렬해줍니다.
Auto Rename TagHTML/XML에서 한쪽 태그를 수정하면 나머지 반대쪽 상응하는 태그를 함께 수정해 줍니다.
VS Color Picker컬러를 선택할 때 팔레트에서 고르거나 스포이트 툴로 색상 코드를 가져올 수 있습니다.
vscode-open-project프로젝트 기능에 비해서는 부족하지만, 작업 폴더를 프로젝트 리스트로 만들어서 쉽게 폴더 전환을 할 수 있습니다.
Paste Image클립보드의 이미지를 바로 마크다운 코드로 붙여넣을 수 있습니다. 붙여 넣은 이미지는 자동으로 지정된 폴더에 저장됩니다.


'프로그래밍 > XML/HTML' 카테고리의 다른 글

그림판  (0) 2018.01.12
Visual Studio Code HTML 확장기능  (0) 2018.01.08
[HTML5] 새로운 요소와 기능  (0) 2014.12.18
자바에서 XPath 사용 하기  (0) 2013.07.07
자바에서 XQueryY 사용법  (0) 2013.07.07
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

Securing AngularJS Applications

Benelus_day_20161125_S_Lekies_Securing_AngularJS_Applications.pd




AngularJS 및 MongoDB의 악용 및 완화를 위한 시큐어코딩

AppSecIL_2014_In-Secure_Mongo_And_Angular_Code_-_Israel_Chorzevs




AngularJS 보안 문서 사이트

https://docs.angularjs.org/guide/security


'보안 > 시큐어코딩' 카테고리의 다른 글

금융보안원 설문지 링크  (0) 2018.03.06
BSIMM은 무엇?  (0) 2018.03.05
[Angular JS] 앵귤라JS 시큐어코딩  (0) 2018.01.03
[Node.js] Node.js 시큐어코딩 규칙 10가지  (0) 2018.01.03
SonarQube 설치 및 사용법  (0) 2017.12.12
OWASP TOP 10 2017  (0) 2017.12.12
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

Node Hero의 11번째 시리즈로, Node.js 보안 튜토리얼로 가장 일반적인 공격 경로로 부터 애플리케이션 방어를 위한 방법을 설명하고 있다. 
원문: https://blog.risingstack.com/node-hero-node-js-security-tutorial/

칙 1: eval을 사용하지 말것


eval은 코드 인젝션 공격에 취약하다. 
명시적으로 eval을 사용하지 않는것 뿐만 아니라 백그라운드에서 eval을 사용하는 함수들도 사용하지 않는것이 좋다.

setInterval(String,2)
setTimeout(String, 2)
new Function(String)

규칙 2: 항상 'use strict' 모드를 사용하라. 


'use strict'을 사용하면 코드내에 존재하는 몇몇 암묵적인 에러를 제거해주고, 에러로그를 출력해 준다.
'use strict'  
delete Object.prototype
// TypeError
var obj = {
a: 1,
a: 2
}
// syntax error

규칙 3: 에러처리에 주의하라


에러처리를 통해 민감한 정보가 노출될 수 있다.

 ex) X-Powered-By:Express 

출력되는 스택정보는 공격자들에게 흥미로운 정보로 제공될 수 있다. 에러 발생에 관련된 내용을 디버깅 정보로 제공하는 좋지 않은 습관이다.

규칙 4: 코드 정적분석을 통해 코드 보안을 강화할 수 있다. 


ESLint 와 Standard code style 조합으로 코드 정적분석을 수행하게 되면 많은 버그를 개발단계에서 제거할 수 있다. 

규칙 5: 슈퍼유저의 권한으로 프로세스를 실행하지 말라


Node.js 애플리케이션을 superuser권한으로 실행하고 직접적으로 80번이나 443포트를 사용하여 사용자의 요청을 받아서 처리하는 경우, 특정 상황이나 에러, 버그가 발생하는 경우 전체 시스템에 영향을 미칠 수 있다.  HTTP요청을 전달하기 위해 HTTP서버나 프록시 설정을 사용하는것이 좋다.

규칙 6: 보안에 관련된 HTTP 헤더 정보를 설정하라


다음은 보안을 강화할 수 있는 HTTP 헤더 설정이다. Node.js에서는 Helmet 모듈을 사용해 헤더들을 쉽게 설정할 수 있다.

Strict-Transport-Security: 서버에 연결할 때 SSL/TLS 연결을 강제한다.

X-Frame-Options: clickjacking에 대한 보호를 제공한다.

X-XSS-Protection:  크로스사이트스크립팅(XSS) 필터를 대부분의 최신 브라우저에 삽입한다.

X-Content-Type-Options: 선언된 content-type과 다른 응답이 내려오는 경우 브라우저에서 MIME-sniffing 공격을 방지한다.

Content-Security-Policy: 넓은 범위의 공격을 방지한다. 크로스사이트 스크립팅 및 다른 크로스사이트 인젝션들이 포함된다.
var express = require('express')  
var helmet = require('helmet')
var app = express()
app.use(helmet())

규칙 7: 적절한 세션관리를 수행한다.


다음은 각 쿠키에서 설정할수 있는 속성들이다. 

secure : 브라우저에게  HTTPS 요청이 들어왔을 때만 쿠키를 전송하도록 설정한다. 

HttpOnly :  JavaScript에서 쿠키에 접근하는 것을 허용하지 않는다. XSS 공격을 방지하는데 도움이 된다.

규칙 8: 쿠키(cookie)의 유효범위를 설정한다.

domain :  요청한 URL과 서버의 도메인이 동일한지 비교한다. 만약 도메인이 일치하거나 도메인의 서브 도메인인 경우 path 속성 검사로 넘어간다.

path: 덧붙여 도메인에 접근 가능한 쿠키의 URL path(e.g: /article/1)를 명시할 수 있다. 만약 도메인과 URL path가 일치한다면 요청 시 쿠키를 전송한다.

expires :  쿠키를 지속적으로(persistent) 사용하기 위해 설정이다.  민감한 정보가 포함된 쿠키는 세션쿠키로만 사용되도록 설정해야 한다.

규칙 9: Retire.js로 취약점을 찾는다.


Retire.js는 사용하고 있는 모듈 버전들에 대해 알려진 취약점을 탐지하는 모듈이다.  다음과 같이 간단히 설치 할 수 있다. 
npm install -g retire

설치후 retire 명령을 실행하여 mod_modules 디렉토리 내의 모듈들의 취약점을 찾을 수 있다.

규칙 10:  Node Security Platform CLI로 사용하고 있는 module들을 감사한다.


Node Security Platform의 주요 명령어라인 인터페이스인 nsp를 사용하여 프로젝트 디렉토리안의 취약한 모듈을 점검 할 수 있다.
npm install nsp --global  
# From inside your project directory
nsp check


'보안 > 시큐어코딩' 카테고리의 다른 글

BSIMM은 무엇?  (0) 2018.03.05
[Angular JS] 앵귤라JS 시큐어코딩  (0) 2018.01.03
[Node.js] Node.js 시큐어코딩 규칙 10가지  (0) 2018.01.03
SonarQube 설치 및 사용법  (0) 2017.12.12
OWASP TOP 10 2017  (0) 2017.12.12
잘정리된 XXE인젝션  (0) 2017.12.12
블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

NoSQL 가용성과 운영 안정성에 대한 분석 ==> http://d2.naver.com/helloworld/1039


NHN NBP저장시스템개발팀의 이혜정씨의 NoSQL에 대한 가용성과 안정성에 대한 결론은 다음과 같음. 


카산드라는 

- 장애시 데이터 복구시간이 오래 걸림

- 복구가 되기전에 해당데이터를 읽으면 틀린결과를 반환할 수 있음.

- 그래서 정합성 레벨을 높이지 않는다면 읽기 처리가 필요한 서비스에서는 사용하기 어려움.


HBase는 

- 구성상 장애요소가 많음.

- 하지만 HDFS 장애가 아닌 이상 데이터 복구가 발생하지 않아 다운타임이 짦음.

- HDFS 장애가 발생해도 다운타임이 생기지 않음.

- 복구중 읽기 성능은 떨어지지만 정합성은 보장됨

- SPoF 부분을 이중화하면 가용성을 더 높일 수 있음


MongoDB는

- 자동 Fail Over를 제공하여 다운타임이 짦음.

- 하지만 비동기식 복제로 인해 Fail Over후 데이터가 유실될 가능성이 있음.



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

파이썬으로 몽고DB에 데이터를 입력하거나, 검색, 업데이트, 삭제를 수행할 수 있다.

MongoDB의 Python용 드라이버는 pymongo 이다.


STEP1. pymongo 드라이버 설치



c:\> pip install pymongo 




STEP2. pymongo 이용하여 MongoDB에 연결하기




 import pymongo

 connection = pymongo.MongoClient("localhost",27017)




STEP3.  MongoDB에 데이터 삽입




 db = connection.TestDB

 collection = db.testCollection

 collection.insert({"이름":"홍길동"});




데이터 업데이트 예제 코드


 

 import pymongo


 connection = pymongo.MongoClient("localhost",27017)

 db = connection.TestDB

 collection = db.testCollection


 collection.insert({"이름":"홍길동"})

 collectionInfo = db.collection_names()

 print collectionInfo


 collection.update({"이름":"홍길동"},{"이름":"이순신"})

 collectionInfo = db.collection_names()

 print collectionInfo


  




데이터 검색 예제 코드


 

 import pymongo


 connection = pymongo.MongoClient("localhost",27017)

 db = connection.TestDB

 collection = db.testCollection


 collection.insert({"이름":"홍길동", "나이": 10})

 collection.insert({"이름":"이순신", "나이": 20})

 collection.insert({"이름":"강감찬","나이":30})

 collection.insert({"이름":"권율","나이":40})


 document = collection.find({"이름":"홍길동"})


 for i in document:

     print ( i )



블로그 이미지

오픈이지 제로킴

시큐어코딩 교육/컨설팅 전문가 그룹

티스토리 툴바