본문 바로가기
반응형

securecoding4

보안결정을 신뢰할 수 없는 입력 값에 의존 - 응용프로그램이 외부 입력값(쿠키, 환경변수, 히든필드 등))에 대한 신뢰를 전제로 보호메커니즘을 사용하는 경우 공격자가 입력값을 조작할 수 있다면 보호메커니즘을 우회할 수 있게 된다. 시스템의 상태정보와 중요한 정보는 서버에만 저장한다. 중요한 정보를 클라이언트 쪽에 저장할 경우, 암호화와 무결성 검사를 거친 데이터만 저장되도록 한다. 외부입력과 관련된 검사가 자바스크립트를 통해 브라우저에서 이루어지더라도, 서버측에서 재검사를 한다. cookie 말고 session으로 안전하지 않은 코드 ▼ 안전한 코드 ▼ 2023. 2. 1.
SQL 삽입 공격 : Hibernate - 질의문 생성 시 상수 문자열만 사용한다. - 외부의 입력에 따라 질의문을 수정해야 한다면 인자를 받는 질의문을 상수 문자열로 생성한 후, 쿼리의 인자값을 setParameter(), set() 등의 메소드를 사용하여 설정한다. 안전하지 않은 코드 1 ▼ public void listHoney() { Session session = new Configuration().configure().buildSessionFactory().openSession(); try { Properties props = new Properties(); String fileName = "Hibernate.properties"; FileInputStream in = new FileInputStream(fileName); prop.. 2023. 2. 1.
안전하지 않은 리플렉션 - 동적 클래스 적재(loading)에 외부의 검증되지 않은 입력을 사용할 경우, 공격자가 외부 입력을 변조하여 의도하지 않은 클래스가 적재되도록 할 수 있다. - 외부의 입력을 직접 클래스 이름으로 사용하지 않고, 외부의 입력에 따라 미리 정한 후보(white list)중에서 적절한 클래스 이름을 선택하도록 한다. 안전하지 않은 코드 ▼ public void workType() { Properties props = new Properties(); // ... if( in != null && in.available() > 0 ) { props.load(in); if(props == null || props.isEmpty()) return; } Strong type = props.getProperty("t.. 2023. 2. 1.
JS) eval() 을 사용하면 안되는 이유 연산식을 계산하기 위해 eval()을 호출하지 말 것 문자열로부터 eval()을 실행하는 것은 엄청나게 위험함. eval()을 사용하면 해커가 위험한 코드를 사용할 수 있다. eval()은 인자로 받은 코드를 caller의 권한으로 수행하는 위험한 함수 또한, 최신 JS엔진에서 여러 코드 구조를 최적화 하는 것과 달리 eval()은 JS인터프리터를 사용해야 하기 때문에 다른 대안들보다 느리다. 최신 JavaScript 인터프리터는 자바스크립트를 기계 코드로 변환한다. 즉, 변수명의 개념이 완전히 없어진다. 그러나 eval을 사용하면 브라우저는 기계 코드에 해당 변수가 있는지 확인하고 값을 대입하기 위해 길고 무거운 변수명 검색을 수행해야 한다. 또한 eval()을 통해 자료형 변경 등 변수에 변화가 일어.. 2023. 2. 1.
반응형