顯示具有 security 標籤的文章。 顯示所有文章
顯示具有 security 標籤的文章。 顯示所有文章

2023年10月31日 星期二

cors

 

報錯問題如下

Access to XMLHttpRequest at 'http://localhost:63110/system/dictionary/all' from origin 'http://localhost:8601' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

從http://localhost:8601訪問http://localhost:63110/system/dictionary/all被CORS policy阻止,因為沒有Access-Control-Allow-Origin 頭信息。CORS全稱是 cross origin resource share 表示跨域資源共享。

出這個提示的原因是基於瀏覽器的同源策略,去判斷是否跨域請求,同源策略是瀏覽器的一種安全機制,從一個地址請求另一個地址,如果協議、主機、端口三者全部一致則不屬於跨域,否則有一個不一致就是跨域請求。

比如:

從http://localhost:8601  到   http://localhost:8602  由於端口不同,是跨域。

從http://192.168.101.10:8601  到   http://192.168.101.11:8601  由於主機不同,是跨域。

從http://192.168.101.10:8601  到   https://192.168.101.10:8601  由於協議不同,是跨域。


註意:服務器之間不存在跨域請求。

瀏覽器判斷是跨域請求會在請求頭上添加origin,表示這個請求來源哪裏。

比如:

GET / HTTP/1.1
Origin: http://localhost:8601


服務器收到請求判斷這個Origin是否允許跨域,如果允許則在響應頭中說明允許該來源的跨域請求,如下:
Access-Control-Allow-Origin:http://localhost:8601

如果允許任何域名來源的跨域請求,則響應如下:
Access-Control-Allow-Origin:*

目前~簡易解法就是在所有的響應頭上加

 Access-Control-Allow-Origin:*




import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * @description: 跨域過慮器
 * @author: Ian Wang
 * @date: 2023/10/31 上午 10:38
 * @version: 1.0
 */
@Configuration
public class GlobalCorsConfig {
    /**
     * 允許跨域調用的過濾器
     */
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        //允許白名單域名進行跨域調用
        config.addAllowedOrigin("*");
        //允許跨越發送cookie
        config.setAllowCredentials(true);
        //放行全部原始頭信息
        config.addAllowedHeader("*");
        //允許所有請求方法跨域調用
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

2022年1月3日 星期一

jackson-mapper-asl-1.9.13.jar dependency check CRITICAL 解決方式

因為他是指出專案中的jackson問題

所以~我回去找dependency看看哪邊用到






可以發現左下角 spring-security-oauth2-autoconfigure 使用的2.2.13 release版本

使用到這個有資安問題的jar包

我嘗試性做升級到目前最新的版本如下







為2.6.1版本

當我升級過後




可以發現原本使用到有資安問題的jar檔

已經沒有在使用


*很多在更新版本的時候, 已經將有資安問題的引用改掉

*因此, 在學習新技術的時候, 還是盡量能以最新版好點

2021年12月19日 星期日

[Spring Boot] Cookie Without Secure Flag

目前情況如下圖






我們可以看到endpoint api的Cookie, 它的HttpOnly和Secure是空白的

根據下面這一篇
https://stackoverflow.com/questions/34489406/adding-httponly-and-secure-flag-for-set-cookie-in-java-web-application










我們可以得知, sesson-config中可以設置安全cookie相關項目
因此, 推測在appication.properties檔案應該有相對應的配置
在看過下面這一篇
https://stackoverflow.com/questions/40974955/spring-boot-java-config-set-session-timeout
得知有server,servlet.session項目, 因此推測在他之下可能能設置cookie
很幸運的回去appication.properties檔案嘗試, 的確有cookie的設置





設置完的結果發現, JSESSIONID 的cookie secure設置確有改變, 如下圖







可是其他的cookie都沒有改變, 怎麼辦呢?
剛好我有查到這一篇
https://rules.sonarsource.com/java/tag/owasp/RSPEC-2092





可以發現在new出來Cookie的時候, 再setSecue就可以了

解決方式->在專案全局中搜尋Cookie字樣, 將其設置secure再回傳
範例

1產生一個處理類

@Component
public class CookieSecureUtils {
	public static Cookie setSecure(Cookie targetCookie) {
		targetCookie.setHttpOnly(true);
		targetCookie.setSecure(true);
		return targetCookie;
	}
}

2載入類


	@Autowired 
	private CookieSecureUtils cookieSecureUtils;

2送出cookie前,設置安全


	response.addCookie(cookieSecureUtils.setSecure(new Cookie("domain", resultObj.getString("domain"))));
	response.addCookie(cookieSecureUtils.setSecure(new Cookie("account", account)));
	response.addCookie(cookieSecureUtils.setSecure(new Cookie("lang", request.getParameter("lang"))));
成果如下圖



2026半年度目標

 1 每個月看看能不能都做專案, 一年12專案 2 刷題每周4題 3 跑個人scrum, 並組讀書會 4規律讀英文ex每天早上8:30-9:30 5規律運動7:35-8:30 6減肥97->85 這是今年年初的目標, 有刷一點題, 但是差不多三月初AI大爆發, 不得不開始接...