반응형

프론트페이지(jsp) => controller 에 폼데이터를 전송할때

데이터를 받아보니 문자가 자동 escape 처리가 되어있었다.

'  는  '

"  는 "

<&lt;

>&gt; 로 바뀌어 전달되었다.

근데 어떤 페이지에서 보낸건 escape 처리가 안 되고 어떤 페이지에서 보낸 건 escape 처리가 되어있었다.

ajax로 보낸건 자동 이스케이프가 안 되는데 form을 만들어서 submit한건 자동 이스케이프 처리가 되는거임..

확인해보니 전송하는 데이터의 Content-Typetext/html인 경우 escape 처리가 되는 듯 함.

 

자세한 설명 ..

text/html 콘텐츠에서는 특수 문자(예: `<`, `>`, `&` 등)가 올바르게 표시되고 HTML 문서의 구조를 방해하지 않도록 하기 위해 문자 이스케이프가 사용됩니다. 예를 들어, `<` 문자는 `&lt;`로, `>` 문자는 `&gt;`로, `&` 문자는 `&amp;`로 이스케이프됩니다. 이는 이러한 문자가 HTML 태그나 엔터티로 해석되는 것을 방지하기 위해 수행됩니다.

반면 application/json 콘텐츠에서 문자 이스케이프는 주로 JSON 형식 자체로 표현되는 데이터와 관련이 있습니다. JSON에는 JSON 파서에서 데이터가 올바르게 구문 분석되고 해석되도록 하기 위해 문자열 내의 문자를 이스케이프하는 자체 규칙이 있습니다. 예를 들어 JSON 문자열 내의 큰따옴표(`"`)와 같은 특수 문자는 `\"`로 이스케이프되고 개행 문자는 `\n`으로 표시됩니다.

 

반응형
반응형

build path에 Maven Dependencies 가 없어가지고.. 온갖 에러가 다 나는데..

1. project clean

2. maven Update Project 

3. maven offline 설정, settings.xml 설정

내 환경은 오프라인이었고..    Maven Dependencies 가 별 염병을 다해봐도 안 생겼다. 

 

프로젝트 루트 경로의 .classpath 파일을 열어서 아래 내용을 추가해주고 프로젝트 클린 및 재정비하고 다시 올리니 잘 된다 ㅠ ㅠ 

	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
		<attributes>
			<attribute name="maven.pomderived" value="true"/>
			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
		</attributes>
	</classpathentry>
반응형
반응형

특정 URL을 호출하며 쿠키를 전송하려고 하는데 전송이 안 된다..?

일단 현재 페이지와 호출하려는 URL, 쿠키의 도메인에 따라서 전송가능 여부가 달라진다.

 

확인해야 할 사항

현재 페이지의 도메인, 프로토콜 &  호출하려는 URL의 도메인, 프로토콜 확인

  쿠키 전송 방향 도메인 프로토콜 쿠키 전송 가능 여부
1 https://site.example.com https://site.example.com 같음 같음 그냥 됨
2 https://site.example.com http://site.example.com 같음 다름 크로스 사이트로 간주함.
교차스킴 정책 참고
3 https://site.example.com  https://site.test.com 다름 같음 크로스 사이트로 간주함.
교차스킴 정책 참고
4 https://site.test.com https:// site.example.com 다름 다름 크로스 사이트로 간주함.
교차스킴 정책 참고

* 크로스 사이트(cross-site) 
  호출하는 URL이 도메인이 다른경우 혹은 http, https 와 같이 사용하는 프로토콜(scheme)이 다른 사이트의 경우
* 서드파티 쿠키
  사용자가 접속한 페이지와 다른 도메인에서 발행한 쿠키
* 퍼스트파티 쿠키
  사용자가 접속한 페이지의 도메인에서 발행한 쿠키

 

일반적으로 크로스 사이트(Cross-site)로의 쿠키전송은 안 됨. 서드파티 쿠키전송이 안 됨.

하지만 쿠키의 SameSite 속성 설정으로 서드파티 쿠키 전송을 가능하게 할 수 있다. 

 

* SameSite 속성
  SameSite 속성은 크로스사이트 요청에서 쿠키 전송을 제한하는 기능을 한다.

 

 

쿠키 생성 시 SameSite 속성 설정하는 예시

javascript

document.cookie = "mycookie=testContent; domain=example.com; Path=/; SameSite=None; Secure;"

 

JAVA

@RequestMapping(value = "/test/setCookieTest")
	public HttpServletResponse setCookieTest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	String cookieValue = "CookieTest=CookieTest; Max-Age=3600; Path=/; SameSite=Lax";  
	Domain="example.com;";
	response.addHeader("Set-Cookie", cookieValue);
	return response;
}

 

SameSite 속성값 설명
none none으로 설정된 쿠키의 경우 크로스 사이트 요청의 경우에도 항상 전송됨
Secure 속성을 꼭 함께 붙여줘야 함
Strict 크로스 사이트 요청에는 항상 전송되지 않음
Lax 몇 가지 예외적인 요청에만 전송됨
예)
<a>를 클릭해서 이동
windows.location.replace 로 자동으로 이동
302 리다이렉트를 통한 이동
<iframe>이나 <img>를 삽입할 때 발생되는 http 요청은 쿠키 전송 안 됨.

 

samesite 속성이 Lax이거나 None이며 secure 속성도 넣었는데 전송이 안된다면...?

아래 교차스킴 정책을 참고해보자..

 

반응형

 

교차스킴 유형에 따른 쿠키 전송 정책

* 교차스킴
URL이 모두 동일한 등록 가능 도메인(예: site.example)을 가지고 있지만 
스킴(프로토콜)은 서로 다르며(예: http://site.example과 https://site.example), 이를 교차 스킴이라고 한다.

2020년 이후로 구글에서 교차스킴에 대한 쿠키전송 정책을 변경한다고 했다.
이제 도메인이 같아도 프로토콜이 다르면 크로스사이트로 간주한다 이말인듯

아래의 교차 스킴 유형에 따라 쿠키 전송을 위한 SameSite 속성값이 다름..

 

1) case 1 - Navigation

페이지 이동하는 경우라고 생각하면 될 듯하다.
하이퍼링크를 클릭해서 페이지를 이동하거나
<a>를 클릭해서 이동하거나 windows.location.replace 로 자동으로 이동하거나,
302 리다이렉트를 통한 이동을 포함함.
쿠키의 SameSite 값에 따라 쿠키가 전송될수도, 안 될수도 있다.

 

2) case 2 - 하위 리소스 요청

페이지 내에서 iframe이나 script, fetch, XMLHttpRequest를 통해 url을 요청하는 경우

 

3) case3 - POST양식 submit

form데이터를 POST 전송하는 경우이다.

 

아무리 정리해봐도 넘 헷갈리는...

틀린 부분이 있으면 댓글로 알려주십셔

 


참고

https://web.dev/i18n/en/schemeful-samesite/

 

Schemeful 동일 사이트

"동일 사이트"의 정의는 URL 체계를 포함하도록 진화하고 있습니다. 따라서 사이트의 HTTP와 HTTPS 버전 간의 링크는 이제 크로스 사이트 요청으로 계산됩니다. 가능한 한 문제를 방지하기 위해 기

web.dev

https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content

 

Mixed content - Web security | MDN

When a user visits a page served over HTTPS, their connection with the web server is encrypted with TLS and is therefore safeguarded from most sniffers and man-in-the-middle attacks. An HTTPS page that includes content fetched using cleartext HTTP is calle

developer.mozilla.org

 

반응형
반응형

Intellij 환경변수 등록하기

 

1. 왼쪽 위의 메뉴중 Run > Edit Configurations 

혹은 오른쪽위에서 어플리케이션 이름을 클릭해서 Edit Configurations를 들어가서

 

2. Spring Boot Application 선택  > Environment variables 란이 없는 경우 Modify options 선택

Environment variables를 선택해서 환경변수칸을 추가한다.

 

3. 환경변수 옵션칸에서 오른쪽 아이콘 클릭

 

여기서 추가하면 댐 

아래 체크는 시스템환경변수 포함할건지 말건지 여부 체크 

반응형
반응형

eclipse에서 SVN을 사용하는경우에

레포지토리에 소스를 업로드 하거나(commit) 내 로컬의 소스를 업데이트하는 방법(git의 경우 pull)

 

1. 프로젝트 우클릭 > Team > Synchronize With Repository

원격 레포지토리와 싱크를 맞추기 위함.  commit해야 하거나 땡겨와야 하는 소스를 확인할 수 있다. 

perspective 모드가 아래와 같이 Team Synchronizing 로 바뀐다.

 

2. Team Synchronizing 모드에서는 왼쪽 창에 파일이 아래와 같이 표시된다.

파일에 달린 화살표의 의미는 아래와 같다.

레포지토리에 update 된 파일
local에 반영 안 된 파일
내가 땡겨와야(update)  할 파일임

 local에서 수정된 파일
레포지토리에 반영 안 된 파일
commit해야 할 파일

local에서도 수정되고
레포지토리에서도
수정되어서 충돌이 난 파일.
해당 파일을 우클릭하여
update를 눌러 땡겨오면 됨
해당 파일을 우클릭하여
commit(업로드) 
혹은
Override and Update
파일 내용을 비교하여 편집한뒤
파일을 우클릭하여 update

 

* 파일 비교/편집하는 법? 

파일을 더블클릭하면 내 로컬 파일과 원격저장소에 있는 파일을 비교할 수 있는 창이 열림

왼쪽이 내 Local 파일, 오른쪽이 원격저장소 파일임.

추가된 부분이 있으면 저렇게 파란줄, 충돌나는 부분은 빨간색으로 표시되며 가운데 네모에 커서를 눌러서 왼쪽/오른쪽 내용을 가지고 덮을 수 있음.

편집 및 확인을 다 했으면 파일 우클릭하여 commit이나 update 진행

 

* 파일 나눠보는 법? 

왼쪽 상단 모드 아이콘 확인. 

왼쪽부터 Incoming Mode,   Outgoing Mode,   Incoming/Outgoing Mode

* update 할 파일만 보기 : Incoming Mode 선택

* commit 할 파일만 보기 : Outgoing Mode 선택

* 둘 다 보기 : Incoming/Outgoing Mode

 

반응형
반응형

Cache-Control 헤더 : 캐시 관련 정책 설정 헤더

1. max-age

캐시 유지 시간.

max-age=0 인 경우 캐시서버의 캐시된 entry에 대해서 원본서버(웹서버)로 유효성 검증을 다시하라는 의미. 유효성 검증을 다시 한다는 것은 캐시에 저장되어 있는 파일이 fresh한 상태라도 원본서버에 있는 파일과의 동일성 유무를 무조건 체크하라는 의미. -> 요청이 많을 경우 원본 서버에 부하를 일으킬 가능성이 있음.

 

2. no-cache

원본서버(웹서버)로부터 무조건 다시 읽어서 응답하라는 의미. max-age=0인 경우는 동일성 유무에 대해서만 매번 체크하지만 no-cache의 경우에는 무조건 원본서버에서 읽어 응답한다는 차이가 있다.

 

3. no-store

캐시 자체를 저장하지 않음

 

출처) 탑스팟 알기사 정보보안기사 교재

반응형
반응형

 


1. ftp-simple Extensions 설치
 - VSCode 에서 FTP 접속을 도와주는 패키지
2. F1 검색 > ftp-simple config setting  > 접속 정보 입력 (JSON)
 - 접속할 서버 및 경로 지정
3. F1 검색 ==> ftp-simple remote directory 선택
 - 접속 연결

반응형
반응형

Run As > Maven install 하여 war 파일을 생성하려고 했는데

아래와 같은 에러가 떴다.

Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sample: Compilation failure

 

해결 방법 : 

Maven 버전이 안 맞아서 그렇다는 경우도 있었으나 나는 JRE 경로가 안 맞는 경우였다.

JRE 경로설정 : [Window] > [Preferences] > [Installed JREs]

기존에 설정되어 있던 경로를 Edit을 눌러 Java 폴더 밑의 jdk 안에 있는 것으로 선택해주었다.

Apply and Close 후 다시 Maven install 해주니 target폴더 밑에 war파일이 생겼다. ㅎㅎ 

반응형
반응형
  • tomcat 버전 : 8.5.55

예를 들어 http://localhost:8080 가 웹서버 url인데

http://localhost:8080/IMAGES 로 접근하면

프로젝트 내부가 아닌 D:\IMAGES와 같은 외부 경로 폴더로 연결되게 하고 싶다?


tomcat 디렉터리의  conf 밑의 server.xml 파일을 수정한다.

Service 하위에 Host 라고 된 부분 밑에 한 줄 추가해준다.

<Context docBaase="실제외부경로" path="접근URL" reloadable="false">

 <Service name="MyService">
      <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxPostSize = "-1"/>
      <Engine name="MyService" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost" appBase="mchch" unpackWARs="true" autoDeploy="true">
      <!-- Host 밑에 추가해준다.-->
        <Context docBase="D:\IMAGES" path="/IMAGES" reloadable="false"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>

설정 저장 후 톰캣 재시작.

* reloadable : true면 15초마다 루트경로의 class파일 변경여부를 확인하고 자동으로 재가동하여 반영한다. 일반적으로 개발환경에선 true, 운영환경에선 false로 하는 듯함.

* 결과 : http://localhost:8080/IMAGES/test.jpg 로 접근하면 D:\IMAGES\test.jpg 를 볼 수 있음.

 

반응형
반응형

1.  yum list java*  로 java 설치 가능 리스트 검색

java-11-amazon-corretto.x86_64 가 ec2에서 설치할 수 있는 java11 jdk이다.

* Amazon Corretto 란 무료로 사용할 수 있는 Open Java Development Kit (OpenJDK) 의 프로덕션용 멀티플랫폼 배포판입니다.

 

2. 설치 : yum install java-11-amazon-corretto.x86_64

설치 완료 후 버전 확인


기존에 다른 버전의 java가 설치되어 있던 경우

java8 이 설치되어 있었음.

java11 이후에 version 확인하면 그대로 8버전이므로 설정을 따로 해줄것.

update-alternatives --config java 하고 2번 선택

update-alternatives --config java 하고 2번 선택

version 확인 해보면 바뀌었다.

 

 


Amazon Corretto 참고 

 

Amazon Corretto 11란 무엇입니까? - Amazon Corretto

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

반응형

+ Recent posts