Web Application Security要做的通常不過就是確認目前使用者是誰,能不能做目前要做的動作,就算提到到SSO、OpenID這些東西,也不過是在確認使用者上多些手續而已。
近來面談的人,跟兩三年前不同,多半對Spring都有些瞭解,但再深入問些應用卻又讓我有點失望,Sercurity就是很常讓我不滿意的地方。
有些人還停留在Submit button的enable or disable,這種情形就比較糟糕,有些完全沒有意識到這樣做會有問題的地方,所以開個Firebug,將disabled拿掉,這些人才覺得這是個問題...再有些人認為用method="GET" or "POST"就能阻止這些問題,但要送一個http post request又有何難?
有些人會很快回覆說利用Filter控制,我個人也認為基本上沒有問題,但我不認為全部都在Filter裡處理完是個好方法,所以我通常會再問如何在Spring的AOP裡得知現在的使用者為何,部份的人會說要修改API,將使用者當做參數之一,或是說傳入HttpSession,但沒有人跟我說過:因為是Web Application,所以可以利用ThreadLocal,如果是其他類型的Applicaton,利用InheritableThreadLocal也可以達成。
將使用者資料透過Filter,自Session中取得放入ThreadLocal中,這做法已經用了好幾年,我想這不是一個很具獨特性的做法,因為像是Spring Security已經到了3.X版,而它最重要的存放使用者的方式就是在放ThreadLocal中;能夠取到使用者的資料,那要在Filter、Service Layer或AOP中要進行控管或記錄都不會是問題,端看設計者的需要。
寫到這又有些擔心,擔心自己是不是自我意識過於良好,不過管他的! 我就是覺得目前看來,不把使用者資料放在ThreadLocal中就是一種設計上的缺陷!
沒有留言:
張貼留言