Spring Framework 5.2 는 context 에 url 이 http가 아니라 https (ssl)로 시작된다.

spring-security-config.jar/META-INF/spring-schemas에 정의됨(이전 버전들은 spring-context.jar 에 정의됨)

xmlns:security="http://www.springframework.org/schema/security" 을 사용하기 위해서는 아래와 같이 정의해야 함.

http://www.springframework.org/schema/security  https://www.springframework.org/schema/security/spring-security.xsdhttps://www.springframework.org/schema/security/spring-security.xsd]

1. properties file : 

<bean org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <list>
        <value>classpath:config/system.properties</value>
    </list>
  </property>
  <property name="ignoreResourceNotFound" value="true" />
  <property name="searchSystemEnvironment" value="true" />
  <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
  </bean>
public class PropertiesUtil extends PropertyPlaceholderConfigurer {
	/**LOGGER SET **/
	private static final Logger LOGGER = LogManager.getLogger(PropertiesUtil.class);
	
	@Autowired 
	private Environment environment;
	 
	private static Map<String, String> propertiesMap;
    // Default as in PropertyPlaceholderConfigurer
    private int springSystemPropertiesMode = SYSTEM_PROPERTIES_MODE_FALLBACK;

    @Override
    public void setSystemPropertiesMode(int systemPropertiesMode) {
        super.setSystemPropertiesMode(systemPropertiesMode);
        springSystemPropertiesMode = systemPropertiesMode;
    }


    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactory, Properties props) throws BeansException {
        super.processProperties(beanFactory, props);

        propertiesMap = new HashMap<String, String>();
        for (Object key : props.keySet()) {
            String keyStr = String.valueOf(key);
            String valueStr = resolvePlaceholder(keyStr, props, springSystemPropertiesMode);
            propertiesMap.put(keyStr, valueStr);
            if(environment !=null)
            	LOGGER.debug("Load Properties: env:{}" ,environment.getProperty(keyStr));
           	LOGGER.debug("Load Properties: {}:{}, env:{}" ,keyStr, valueStr,"te");
      
        }
    }

    /**
     * This method return value with the name from properties map
     * @param name propertiy name
     * @return
     */
    public static String getString(String name)  {
        return propertiesMap.get(name).toString();
    }
    
    public static int getInt(String name) {
    	if (propertiesMap.get(name) != null || propertiesMap.get(name) != "") {
            return Integer.parseInt(String.valueOf(propertiesMap.get(name)));    		
    	}
    	else {
    		return 0;
    	}
    }

    public static long getLong(String name) {
    	if (propertiesMap.get(name) != null || propertiesMap.get(name) != "") {
            return Long.parseLong(String.valueOf(propertiesMap.get(name)));    		
    	}
    	else {
    		return 0;
    	}
    }
}

2. Envrionment  eclipse tomcat server "Open launch configuration" > environment 탭

3. Java Compile option "-D...."

 

 

ref. https://stackoverflow.com/questions/45822326/precedence-order-among-properties-file-yaml-file-and-command-line-arguments-in

 

Spring Boot uses a very particular PropertySource order that is designed to allow sensible overriding of values. Properties are considered in the following order:

  1. Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active).
  2. @TestPropertySource annotations on your tests.
  3. @SpringBootTest#properties annotation attribute on your tests.
  4. Command line arguments.
  5. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property)
  6. ServletConfig init parameters.
  7. ServletContext init parameters.
  8. JNDI attributes from java:comp/env.
  9. Java System properties (System.getProperties()).
  10. OS environment variables.
  11. A RandomValuePropertySource that only has properties in random.*.
  12. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants)
  13. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants)
  14. Application properties outside of your packaged jar (application.properties and YAML variants).
  15. Application properties packaged inside your jar (application.properties and YAML variants).
  16. @PropertySource annotations on your @Configuration classes.
  17. Default properties (specified using SpringApplication.setDefaultProperties).

1. Nginx 우선순위

location / {


root /usr/local/openresty/nginx/html;  

#경로의 index.htm 이나, index.html 호출.  아래의 확장자 location으로 search 가 진행됨.

}


location ~ \.(htm|html|ico|jhtm|PDF|png|zip|ZIP|unity3d|jpeg|ai|bin|dat|dwg|dxf) {

    root /images

}


확장자  location에서 root /images 로 변경되어,  html 파일을 /images 경로에서 찾게됨.

1. 목적: 크래커를 통해 평문인 패스워드가 탈취되었을 때 그 패스워드를 사용하여 로그인이 가능하다.


2. 이슈: 프로젝트 상황이 TLS(HTTPS)를 사용할 수 없는 상황에서 크래커가 네트워크 중간에서 패스워드를 탈취하여 시스템에 접속할 수 있는 보안 문제가 발생함.


3. 이미 구축된 시스템은 

       1) 사용자 등록 시 패스워드를 SHA256으로 암호화 되어 서버에 저장함.

       2) 사용자가 로그인 하는 경우 웹화면으로 부터 ID/PW 를 입력 받아 DB에서 입력받은 ID/PW를 이용해 조회한 후, 입력받은 PW를 동일한 방식         (SHA256)으로 암호화 하여 조회된 PW와 비교하는 방식으로 인증 처리함.


4. 해결: 웹 화면에서 스크립트를 이용하여 서버에 저장된 같은 방식으로 SHA256 암호화 하여 전송함.

- SHA256으로 암호화하는 경우도 salt가 동일하여 Hash 값 역시 일정한 값으로 네트워크 중간에 패스워드를 탈취하는 해킹을 피해갈 수 없음.

- 매번 값을 변경하기 위해 BCrypt를 사용하여 암호화 하였으나, 이 역시 SALT 가 포함되어 있어 이미 사용된 패스워드 해쉬값을 계속 사용할 수 있음.

- 최종 해결책은 처음 시스템 접속시 생성된 Session ID 값을 같이 암호화 하여 처리함.


* 자세한 내용은 퇴근시간이 다되서 여기에 적지 않음~~~ 

1. 목적 : Excel 파일로 다운로드시 HTML Tag 없이, 순수 Text 만 저장함


2. 이슈 : Intercept 등을 이용해 데이터 컨버전을 하게되면, 다량의 데이터를 내려받는 업무에서 속도가 30% 정도 느려지는 현상 발생. 


3. 상황 

1) 프로젝트에서 웹 에디터를 이용하여 컨텐츠를 저장함. 이 에디터로 저장된 컨텐츠들은 HTML Tag 가 포함되어 있음


2) DB에 저장될 때 HTML Tag를 포함한 데이터들은 XSS 보안을 위해 Encoding data 로 변환하여 저장됨

    예] 

Hello World<br />

<em><strong>Hello World</strong></em>

==>

Hello World&lt;br /&gt;

&lt;em&gt;&lt;strong&gt;Hello World&lt;/strong&gt;&lt;/em&gt;


3) DB에 저장될 때 HTML Tag를 포함한 데이터들은 XSS 보안을 위해 Encoding data 로 변환하여 저장됨 


4. 해결

     1) 오라클의 내장 함수 REGEXP_REPLACE, DBMS_XMLGEN.CONVERT 사용

          DBMS_XMLGEN.CONVERT 를 사용하여 Encoding 값을 HTML Tag로 변환 후 REGEXP_REPLACE 을 이용하여 HTML Tag 는 빈 값으로 변경한다.

       예]

          REGEXP_REPLACE(DBMS_XMLGEN.CONVERT(HTML_ENCODED_DATA, 1), '<[^>]*>|\&([^;])*;', '') AS ONLY_TEXT_DATA

      

5. Encoding 값을 곧바로 REGEXP_REPLACE 를 사용하여 변경할 수도 있을거 같으나, 100% 만족하는 규칙을 찾을 수 없어, 위와 같이 처리함.

+ Recent posts