Spring security configuration

12
ت1 تيه ه کننده: حميد قربانیSpring Security https://ir.linkedin.com/in/ghorbanihamid Spring Security Framework spring security تنی بررهای مب برای نرم افزا متنوعی وسیع و حل های راهJ2EE مختلفی دارد هاییه وده است. امنیت نم فراهم و درspring security یه فق مکن است هریکه م تا آنجای شده استش تد امنیت دریجازی کند. ا پیاده سایف خودش را ط وظا برنامه دو مرحله اصلی است، ها شاملAuthentication ( احراز هویت) وAuthorization )نجام کاررسی مجوز ابر( . در سطحAuthentication ، ند :د. مانی می کن پشتیبان احراز هویتز مدل هایدی اد زیا اسپرینگ از تعدا HTTP BASIC authentication headers (an IEFT RFC-based standard) HTTP Digest authentication headers (an IEFT RFC-based standard) HTTP X.509 client certificate exchange (an IEFT RFC-based standard) LDAP (a very common approach to cross-platform authentication needs, especially in large environments) Form-based authentication (for simple user interface needs) OpenID authentication Java Open Source Single Sign On (JOSSO) * OpenNMS Network Management Platform * Java Authentication and Authorization Service (JAAS) کتابخانهترین اصلیSS ، نامشspring-security-core.jar ذیل است:سهای می باشد که شامل ک org.springframework.security.core org.springframework.security.access org.springframework.security.authentication org.springframework.security.provisioning org.springframework.security.remoting های کتابخانههمترین برخی از مSS ل می باشد: به شرح ذیWeb - spring-security-web.jar داشت.ز خواهد کتابخانه نیاشد، به این می بام افزار وب شما یک نرم افزارشد. اگر نر می باه امنیت وبلترهای مربوط ب شامل فیConfig - spring-security-config.jar لترهای فیSS صورت را به دوannotation دن آن در یک فایلار دا یا قرXML م افزار خود به صورت نر شما درل کرد، اگرعما از فایلده استفا اXML ید، به می دهنجامت را ا تنظیما داشتز خواهید کتابخانه نیا این. LDAP - spring-security-ldap.jar ما به روش اگر شLDAP احراز کتابخانهد، به این کنیت می هوی داشت.ز خواهید نیاACL - spring-security-acl.jar ACL ف مخفAccess control list ( ک شی است که به یز مجوزهاستی ا است و لیobject شود. یکلصاق می ا) ACL ی کند که کدام مشخص مک شی را دارد. به یتم حق دسترسییسبر یا س کار از برایگر شما ا داشت.ز خواهید کتابخانه نیاد، به این کنیستفاده مییت از این روش ا احزار هو

Transcript of Spring security configuration

Page 1: Spring security configuration

ت

1

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

Spring Security Framework

spring security راه حل های وسیع و متنوعی برای نرم افزارهای مبتنی برJ2EE فراهم نموده است. امنیت الیه های مختلفی دارد

برنامه ط وظایف خودش را پیاده سازی کند. ایجاد امنیت درتالش شده است تا آنجاییکه ممکن است هر الیه فق spring securityو در

. )بررسی مجوز انجام کار( Authorization و( احراز هویت) Authenticationها شامل دو مرحله اصلی است،

اسپرینگ از تعداد زیادی از مدل های احراز هویت پشتیبانی می کند. مانند : ، Authenticationدر سطح

HTTP BASIC authentication headers (an IEFT RFC-based standard)

HTTP Digest authentication headers (an IEFT RFC-based standard)

HTTP X.509 client certificate exchange (an IEFT RFC-based standard)

LDAP (a very common approach to cross-platform authentication needs, especially in large environments)

Form-based authentication (for simple user interface needs)

OpenID authentication

Java Open Source Single Sign On (JOSSO) *

OpenNMS Network Management Platform *

Java Authentication and Authorization Service (JAAS)

می باشد که شامل کالسهای ذیل است: spring-security-core.jar، نامش SSاصلیترین کتابخانه

org.springframework.security.core org.springframework.security.access org.springframework.security.authentication org.springframework.security.provisioning org.springframework.security.remoting

به شرح ذیل می باشد: SSبرخی از مهمترین کتابخانه های Web - spring-security-web.jar

شامل فیلترهای مربوط به امنیت وب می باشد. اگر نرم افزار شما یک نرم افزار وب می باشد، به این کتابخانه نیاز خواهد داشت.

Config - spring-security-config.jar

اعمال کرد، اگر شما در نرم افزار خود به صورت XMLیا قرار دادن آن در یک فایل annotationرا به دو صورت SSفیلترهای

.این کتابخانه نیاز خواهید داشتتنظیمات را انجام می دهید، به XMLاستفاده از فایل

LDAP - spring-security-ldap.jar

نیاز خواهید داشت.هویت می کنید، به این کتابخانه احراز LDAPاگر شما به روش

ACL - spring-security-acl.jar

ACL مخففAccess control list ( است و لیستی از مجوزها است که به یک شیobject الصاق می شود. یک )ACL مشخص می کند که کدام

احزار هویت از این روش استفاده می کنید، به این کتابخانه نیاز خواهید داشت.اگر شما از برای کاربر یا سیستم حق دسترسی به یک شی را دارد.

Page 2: Spring security configuration

ت

2

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

CAS - spring-security-cas-client.jar

CAS یاCentral Authentication Service یگانه یک سیستم شناساییSingle Sign-On است که این امکان را بر روی وب

تم پشتیبانی می کنند را فراهم می آورد که دیگر نیازی به خاطر سپردن نشانه های رایج شناسایی مانند نام برای کاربران سایت هایی که از این سیس

اگر شما از برای احزار هویت از این روش استفاده کاربری و یا کلمه عبور نمی باشد. به جای آن تنها به ثبت نام در یک وب سایت احراز هویت نیاز دارند.

تابخانه نیاز خواهید داشت.می کنید، به این ک

OpenID - spring-security-openid.jar

OAuth وOpenID .دو استاندارد برای شناسایی )احراز هویت( هستند که برخی از سایت ها و سرویس های عمومی از آنها استفاده می کنند

OAuth یک استاندارد بازOpen Standard آورد.ه کالینت به منابع سرور بعنوان مالک منابع، فراهم می است که یک دسترسی امن برای برنام

ک بستر امن ، با این سیستم به کاربران خدمات اینترنتی اجازه می دهد تا اطالعات کاربری خود را بدون نیاز به وارد کردن نام کاربری و کلمه عبور، در ی

خدمات دیگر به استراک بگذارند.

OpenID همانند CAS یگانه ناسایی یک سیستم شSingle Sign-On است که این امکان را برای کاربران سایت هایی که از این سیستم پشتیبانی

آن تنها به ثبت می کنند را فراهم می آورد که دیگر نیازی به خاطر سپردن نشانه های رایج شناسایی مانند نام کاربری و یا کلمه عبور نمی باشد. به جای

.استفاده می کنید، به این کتابخانه نیاز خواهید داشتاز این روش اگر شما از برای احزار هویت احراز هویت نیاز دارند.نام در یک وب سایت

: web applicationدر یک Spring Securityراه اندازی

فایل آن دستورات زیر را به است. web.xmlاعمال تنظیمات آن در در یک نرم افزار تحت وب ، spring securityاولین مرحله از راه اندازی

اضافه می کنیم.

<filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

<listener> <listener-class>org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <listener> <listener-class> org.springframework.security.web.session.HttpSessionEventPublisher </listener-class> </listener>

Page 3: Spring security configuration

ت

3

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

Enabling Spring Security debug logging:

مربوط به تنظیمات اسپرینگ اضافه کنیم: XMLرا به فایل debug تگ کافیست که SSبرای فعال کردن الگ

<debug />

فعال شود بصورت زیر عمل می کنیم: log4jمحیط اگر بخواهیم الگ در

افزودن کد زیر به فایلlog4j.properties :

log4j.logger.org.springframework.security=DEBUG

یا افزودن کد زیر به فایلlog4j.xml :

/>""trace=level "org.springframework"=name Logger<

Authentication in a Web Application

به شکل زیر است. httpدستوری که الزم است ، استفاده از تگ لبرای احراز هویت در برنامه تحت وب حداق

<http auto-config='true'>

<intercept-url pattern="/**" access="ROLE_USER" />

</http>

دسترسی ROLE_USERبرنامه ما کاربرانی با حداقل سطح وظایف URLمامی ادرسهای دستور باال به این معنی است که می خواهیم به ت

ترسی تعریف کنیم ، از رای آنها سطح دسبرای اینکه بتوانیم با استفاده از الگوهای خاصی صفحات خود را دسته بندی کرده و ب داشته باشند.

برای تعیین accessبرای تعیین الگوهای مد نظر و خاصیت تگن در ای patternخاصیت استفاده می کنیم. <intercept-url> تگ

بخواهیم اگر از ویرگول استفاده می کنیم. accessبرای تعیین بیش از یک سطح دسترسی در خاصیت سطح دسترسی آنها استفاده می شود.

قرار گیری لیست بکه در اینصورت ترتی را تکرار می کنیم. توجه کنید <intercept-url> تگف کنیم، یرالگوهای متفاوتی را تع

دستورات مهم است و دستورات از باال به پایین بررسی می شوند. بنابراین اولین دستوری که با الگوی ما مطابقت داشته باشد، انتخاب می

ین می توان الگو ها را در سطح متد شود. در نتیجه باید الگویی که بیشترین مطابقت را با ادرس ما دارد در ابتدای دستورات قرار دهیم. همچن

استفاده می کنیم. <intercept-url> تگدر methodنیز تقسیم بندی کرد برای این کار از خاصیت

به شکل زیر است: httpساختار کلی تگ

<http>

<form-login />

<http-basic />

<logout />

</http>

Page 4: Spring security configuration

ت

4

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

مثال:

<http auto-config='true'>

<intercept-url pattern="/login.jsp*" access="IS_AUTHENTICATED_ANONYMOUSLY"/>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login login-page='/login.jsp'/>

</http>

می anonymousقابل دسترسی برای کاربران login.jspتگ اول می گوید که صفحه وجود دارد. <intercept-url>در دستور باال دو تگ

قابل دسترس هستند. توجه ROLE_USERمی گوید که مابقی صفحات برنامه توسط کاربرانی با نقش کاربری <intercept-url>باشد. تگ

ن نمایش داده نشود و کاربر خطای دسترسی بگیرد، در حالی این کنید که نبودن تگ اول باعث می شود که حتی صفحه الگین نیز برای کاربرا

صفحه باید باز باشد تا کاربر با الگین بتواند احراز هویت کند.

از دستور زیر برای استثناء کردن آنها … ,JS,CSS,Imagesمی توانیم برای بخشهایی از صفحات که نیازی به سطح دستری ندارند مانند

استفاده نماییم. <http pattern="/css/**" security="none"/>

مثال:

<http pattern="/css/**" security="none"/>

<http pattern="/login.jsp*" security="none"/>

<http auto-config='true'>

<intercept-url pattern="/**" access="ROLE_USER" />

<form-login login-page='/login.jsp'/>

</http>

استفاده کنند ، از خاصیت ( http ،Https )هایمان از کدام کانال Urlمشخص کنیم اگر بخواهیم interceptorدر قسمت نکته:

requires-channel .استفاده می کنیم

مثال:

<http>

<intercept-url pattern="/secure/**" access="ROLE_USER" requires-channel="https"/>

<intercept-url pattern="/**" access="ROLE_USER" requires-channel="any"/> ...

</http>

را تغییر دهیم : Httpsو Httpحتی می توانیم پورتهای مربوط به

<http>

...

<port-mappings>

<port-mapping http="9080" https="9443"/>

</port-mappings>

</http>

Page 5: Spring security configuration

ت

5

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

Authentication:

بیس برای احراز هویت نیاز به یک فرم الگین داریم تا تصمیم بگیریم که با دریافت یوزرنیم و پسورد و مقایسه آنها با مقادیر موجود در دیتا

فرم الگین spring securityرحله فرم الگین است. اگر فرم الگین را مشخص نکنیم امکان ادامه کار را به کاربر بدهیم یا خیر. اولین م

در <form-login>. برای مشخص کردن فرم الگین از تگ را استفاده می کند spring_security_loginبا آدرس پیش فرض خودش

spring security :استفاده می کنیم

<form-login> element:

<form-login

login-page='/login.html' login-processing-url="/perform_login" default-target-url="/homepage.html" authentication-failure-url="/login.html?error=true" always-use-default-target="true"/>

/>

از spring securityبرای معرفی صفحه الگین خودمان به می باشد، form-login تنظیمات کامل مربوط به تگکد باال یک نمونه از

استفاده می کنیم. login-page خاصیت

وارد زیر رعایت شده باشد: ما JSPفایل در توجه شود که در صورتی که قرار باشد از آدرس خودمان استفاده نماییم حتما باید

آن با مقدار Actionوجود داشته باشد. خاصیت POSTنوع باید یک تگ فرم با متدی از JSPدر صفحه -

/j_spring_security_check .مقدار دهی شده باشد

<form name='f' action="/j_spring_security_check" method='POST'>

تگهایی برای دریافت یوزر نیم و پسورد وجود داشته باشد. -

تغییر داده شده است. login/ادرس می باشد به j_spring_security_check/آدرس spring securityاز 4در نسخه نکته :

آن را login-processing-url از تگ با استفاده باید مان برای احراز هویت استفاده کنیم ، خودظراحی شده توسط ادرس از اگر بخواهیم

. برای اسپرینگ مشخص کنیم

login-processing-url="/perform_login"

، اسپرینگ برای ما انجام می دهد را XMLداشته باشید که در این صورت باید بخشی از کارهایی که فقط با تنظیم آنها در فایل هتوج

شتق کنیم و البته این امکان نیز وجود دارد که هر جا که الزم بود کالسهای خودمان را از کالسهای اسپرینگ مخودمان برنامه نویسی کنیم.

کدهای خودمان را نیز عالوه بر اسپرینگ اجرا کنیم. در بخشهای بعد به این موضوع خواهیم پرداخت.

Page 6: Spring security configuration

ت

6

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

Post-Login Destination (The Landing Page on Success):

-default-target خاصیت برای اینکه به اسپرینگ بگوییم که کاربر باید به کدام صفحه منتقل شود، از هنگامی که احراز هویت موفق بود،

url .استفاده میکنیم

default-target-url="/homepage.html"

شویم. اگر بخواهیم همیشه redirectدر بعضی سایته این امکان وجود دارد که بعد از الگین موفق به آن صفحه ای که قبال در آن بودیم، دوباره

صیت زیر استفاده می کنیم.بعد از الگین به یک صفحه مشخص الگین کنیم از خا

always-use-default-target = 'true'

مثال:

<http pattern="/login.htm*" security="none"/>

<http>

<intercept-url pattern='/**' access='ROLE_USER' />

<form-login login-page='/login.htm'

default-target-url='/home.htm'

always-use-default-target='true' />

</http>

فراخوانی خواهد SavedRequestAwareAuthenticationSuccessHandler هنگامی که احراز هویت موفق بود، بصورت پیش فرض کالس

ذخیره شود و سپس صفحه را به آدرس تعیین RequestCacheآمده در که از سمت کالینت Requestشد. این کالس ابتدا چک می کند که

ورت همیشه به آدرس ذکر تنظیم شده باشد ، در اینص trueبه alwaysUseDefaultTargetUrlمی کند. اگر خاصیت redirectشده

خواهیم رفت. url-target-defaultشده در خاصیت

The Landing Page on Failure:

بصورت پیش فرض فراخوانی خواهد SimpleUrlAuthenticationFailureHandler احراز هویت موفق نباشد کالس هنگامی که

چک خواهد کرد، اگر مقداری برای آن در نظر گرفته شده باشد، به آن ار authentication-failure-urlشد. این کالس خاصیت

به معنی احراز هویت ناموفق است. 401کالینت ارسال خواهد کرد. خطای را به سمت 401ادرس فرستاده خواهد شد. اگر نه خطای

authentication-failure-url="/login.html?error=true"

Page 7: Spring security configuration

ت

7

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

Logout Handling:

ی زیر استفاده م تگاستفاده می کند، اما اگر بخواهیم ان را به آدرس خودمان تغییر دهیم از logoutاسپرینگ از ادرس پیش فرض برای

کنیم.

<logout logout-url="/logoutAction.action" />

Spring Security برای احراز هویت انجام می دهد: کارهایی چه

می سازد. UsernamePasswordAuthenticationTokenیوزر نیم و پسورد وارد شده توسط کاربر را گرفته و نمونه ای از آبجکت (1

مشتق شده است. Authenticationاین آبجکت خود از اینترفیس اصلی

جهت اعتبار سنجی فرستاده می شود. AuthenticationManagerتوکن ایجاد شده به نمونه ای از کالس (2

را برمی گرداند. Authentication، ابجکت کامل شده AuthenticationManagerبعد از اعتبار سنجی موفق، کالس (3

جهت استفاده در مراحل بعدی قرار می گیرد: security contextکامل شده درون Authenticationآبجکت (4

SecurityContextHolder.getContext().setAuthentication(…)

شما می توانید در هر یک از مراحل ذکر شده سکان کار را از اسیرینگ بگیرید، کار مد نظر خودتان را انجام دهید و دوباره سکان را به

قبل از security contextدرون Authenticationدر واقع برای اسپرینگ تنها مهم است که ابجکت کامل شده اسپرینگ پس بدهید.

و برایش مهم نیست که این کار چگونه توسط شما پیاده سازی در درسترس داشته باشد AbstractSecurityInterceptorرسیدن به فیلتر

روشهای مختلفی وجود دارد که در ذیل به آن اشاره می کنیم. AuthenticationManagerبرای پیاده سازی می شود.

Authentication Providers:

است که در داخل کتابخانه اصلی آن قرار دارد. درون عنصر AuthenticationManagerیکی از کالسهای مهم اسپرینگ کالس

AuthenticationManager انواع مختلفی از Authentication Provider ها قرار گرفته اند و درونAuthentication Provider ها پیاده

دریافت یوزنیم و پسورد از منبع UserDetailsServiceقرار داده شده اند. کار کالس UserDetailsServiceسازی های مختلفی از کالس

اشد.( و مقایسه آن با یوزر و پسورد وارد شده می ب LDAP دیتابیس یا مانند)ذخیره شده

اگر بخواهیم که عمل احراز هویت با استفاده از یوزرهای داخل دیتابیس خودمان صورت پذیرد باید بصورت زیر عمل کنیم: حال

کد خودمان را در آن مشتق کنیم و Spring Securityمربوط به UserDetailsService از کالس می توانیم یک (1

اعالن کنیم:به اسپرینگ ت آن را تنظیمااین صورت باید در قسمت در بنویسیم.

<authentication-manager>

<authentication-provider user-service-ref='myUserDetailsService'/>

</authentication-manager>

<beans:bean id="myUserDetailsService" class="com...MyUserDetailsService"/>

Page 8: Spring security configuration

ت

8

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

مشتق شده، UserDetailsService اینترفیس که از( 'myUserDetailsService') شده خودمان در کالس تعریفتوجه کنید که

شامل آدرس classدر مثال باال خاصیت کنیم. override، اصطالحا آن را را تعریف کنیم loadUserByUsernameباید متد

فیزیکی کالس تعریف شده توسط ما می باشد.

کالسی که با دیتابیس ارتباط برقرار خواهد دیتابیس نیاز داریم با دیتابیس ارتباط برقرار کنیم، می توانیم برای دریافت اطالعات از (2

:را نیز خودمان پیاده سازی کنیمکرد

<authentication-manager>

<authentication-provider>

<jdbc-user-service data-source-ref="mySecurityDataSource"/>

</authentication-provider>

</authentication-manager>

<bean id="mySecurityDataSource"

class="org.springframework.jdbc.datasource.DriverManagerDataSource">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />

<property name="url" value="jdbc:mysql://localhost:3306/test" />

<property name="username" value="root" />

<property name="password" value="123" />

</bean>

استفاده Spring Securityکالسهای می توانیم از encodingرمز عبور معموال کد می شود تا قابل تشخیص نباید، برای (3

:کنیم یا از کالسهای مد نظر خودمان استفاده کنیم

<password-encoder hash="sha">

<salt-source user-property="mySalt"/>

</password-encoder>

<beans:bean id="myPasswordEncoder"

class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"/>

<beans:bean id="mySaltSource"

class="org.springframework.security.authentication.dao.ReflectionSaltSource">

<beans:property name="userPropertyToUse" value="username"/>

</beans:bean>

Saltهم استفاده می کنند. saltیوزر نیم جهت پیچیده تر شدن کدینگ رمز و کاهش احتمال دیکد شدن رمز، از encodingدر بحث

شود و نتیجه کد می شود. در این صورت احتمال شناسایی رمز بشدت کاهش می در اصل یک مقدار تصادفی است که با رمز عبور ترکیب می

در saltاستفاده کرد. برای مشخص کردن منبع saltنیز بعنوان usernameیابد. به جای یک مقدار تصادفی می توان مثال از فیلد

آن اشاره شده است. استفاده می شود که در مثال باال به userPropertyToUseاسپرینگ از خاصیت

Page 9: Spring security configuration

ت

9

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

Session Management:

تنظیمات را با نامعتبر را تشخیص داده و به ادرس مناسبی هدایت کند. این sessionمی توانید اسپرینگ را طوری تنظیم کنید تا ما ش

می توانید انجام دهید: session-managementاستفاده از تگ

<http>

...

<session-management invalid-session-url="/invalidSession.htm" />

</http>

کند و logout، در این حالت اگر کاربر از برنامه کنید یاستفاده م session timeoutاگر شما در برنامه تان از مکانیزمی برای کته:ن

، کنید ین را با دستور باال نامعتبر ماینکه وقتی شما سشاه با خطا روبرو می شود. بخاطر دوباره بدون بستن مرورگر بخواهد وارد شود ، انگ

پاک کنید. با دستور زیررا cookieحل این مشکل باید وجود دارد و پاک نمی شود. برای cookieسشن تا بسته شدن مرورگر هنوز در

<http>

<logout delete-cookies="JSESSIONID" />

</http>

Concurrent Session Control:

web.xmlابتدا مطمئن میشویم که تگ ذیل در ( concurrent user loginمزمان یک کاربر از چند مرورگر متفاوت )کنترل الگین شدن هرای ب

موجود باشد:

<listener>

<listener-class>

org.springframework.security.web.session.HttpSessionEventPublisher

</listener-class>

</listener>

تگ زیر را به فایل تنظیمات اضافه می کنیم: س پس

<http>

...

<session-management>

<concurrency-control max-sessions="1" />

</session-management>

</http>

ذیل استفاده می کنیم: از تگ اگر بخواهیم مانع ورود نفر دوم شویمشود. logoutعث می شود که با ورود دوم نفر اول اباال بستور د

<http>

...

<session-management>

<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />

</session-management>

</http>

-session بخواهیم کاربر را به صفحه خطای خودمان منتقل کنیم از خاصیتدریافت می کند. اگر 402این حالت نفر دوم خطای ر د

authentication-error-url کنیم. یاستفاده م

Page 10: Spring security configuration

ت

10

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

: (Session Hijacking) ها یاستراق نشستا

.شودجعل می session key یا در اصلsession شود که در آنای گفته میبه طور کلی به حمله

cookie مانندشوند و تا زمان اعتبار آن، آن اطالعات باقی میاطالعاتی هستند که به طور موقت ذخیره می.

ترین استفاده آن برای اطالعات شود تا کاربر مجبور نباشد این اطالعات را چندین بار وارد کند. مرسوماستفاده می هاگاهوب این اطالعات درمعموالً از

.ورود به سایت است

کند و تا زمان مشخص شده، افزار وبگاه یک جلسه ایجاد و در آن اطالعات ورود را ذخیره میکه پس از وارد کردن اطالعات ورود به سایت، نرم بدین گونه

.ماننداین اطالعات ذخیره می

نخواهد رمز عبور خود، برای بازکردن صفحات دیگر وبگاه نیاز به وارد کردن دوباره مرورگر در )session key (بنابراین کاربر با داشتن کلید جلسه

.داشت

تواند خود را به عنوان کاربر وارد شده ها طبیعی است که شخص نفوذگر با داشتن کلید جلسه میشده در مورد نحوه عملکرد جلسه طبق توضیحات داده

کلید جلسه مدیر نفوذگر در وبگاه معرفی کند و بدیهی است که این امر بدون داشتن نام کاربری یا رمز عبور قابل انجام خواهد بود که در اغلب مواقع نیز

.شودکند و از این طریق وارد صفحه مدیریت وبگاه میوبگاه را جعل می

:های بسیاری وجود داردرای جعل کردن کلید جلسه راهب

: (session fixation) ثبیت نشستت

. از این طریق شخص قربانی با وارد شدن به سایت )همراه خواهددهد که خود میوذگر کلید جلسه شخص مورد هدف را آن چیزی قرار میدر این روش نف

.دهد تا با استفاده از همان کلید جلسه خود را به جای قربانی معرفی کندبا کلید جلسه که نفوذگر به او تحمیل کرده( این امکان را به مهاجم می

.شودکه فرستاده میهایی اعتماد نداشتن به لینکترین کار برقراری امنیت شخصی است و جلوگیری از این روش، مهم برای

نرا باز کند، با کلید جلسه را برای قربانی ارسال کند و قربانی بدون توجه به آدرس آ http://site.com/?SID=TEST به عنوان مثال اگر مهاجم آدرس

. وارد سایت شود TEST تواند باشود و اگر در سایت وارد شود، مهاجم نیز میوارد سایت می TEST معادل

: (Session sidejacking)استراق سمع

دریافت و از آن ( های بیسیممعموالً در شبکه( استراق سمع اطالعات رد و بدل شده را به روش TCP/IP هایpacket در این روش نفوذگر از طریق

.کندکلید جلسه را استخراج می

تواند به جلوگیری از این روش کمک کند. شایان ذکر است می (https)برای جلوگیری از این راه عالوه بر تأمین امنیت شخصی، استفاده از پروتکل امن

.کندشما را مطلع می پیغام خطا استراق سمع صورت گیرد، مرورگر با نمایش https که اگر در

XSS :

.تواند کدهای جاوااسکریپت روی سیستم قربانی اجرا کند، نفوذگر میXSS ا وجود حفرهب

.ها استها و جلسهCookie ام داد، سرقتانج جاوا اسکریپت توان بااز جمله کارهایی که می

.های جلوگیری از این روش هستندها از جمله راهها و کوکیکردن جلسه HttpOnly و همچنین XSS جلوگیری از

Page 11: Spring security configuration

ت

11

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

Session Fixation Attack Protection:

سشن IDیا شودجدید ایجاد sessionیک یا هنگام الگین کهن است یبرای دفع این حمله ااصلی راه session fixationجلو گیری از حمله رای ب

می توانید این گزینه را تنظیم <session-management>در تگ session-fixation-protectionبا استفاده از خاصیت . شما فعلی عوض شود

که این خاصیت به خود می گیرد عبارتند از : نمایید. مقادیری

none - Don’t do anything. The original session will be retained.

newSession - Create a new "clean" session, without copying the existing session data (Spring Security-

related attributes will still be copied).

migrateSession - Create a new session and copy all existing session attributes to the new session. This

is the default in Servlet 3.0 or older containers.

changeSessionId - Do not create a new session. Instead, use the session fixation protection provided by

the Servlet container (HttpServletRequest#changeSessionId()). This option is only available in Servlet 3.1

(Java EE 7) and newer containers. Specifying it in older containers will result in an exception. This is the

default in Servlet 3.1 and newer containers.

The <global-method-security> Element:

را Secured@ دستور سپس اضافه کنیم. XMLکرد، تگ زیر را باید باه فایل secureالملنهای برنامه را annotationاینکه بتوان بصورت رای ب

:یکنیممد نظر اضافه مباالی هر المانی

<global-method-security secured-annotations="enabled" />

<global-method-security jsr250-annotations="enabled" />

<global-method-security pre-post-annotations="enabled" />

اگر آن را به متد یک کالس اضافه کنیم، دسترسی به آن متد با توجه به نوع تعریف ما محدود خواهد شد.ثال م

مثال:

public interface BankService {

@Secured("IS_AUTHENTICATED_ANONYMOUSLY")

public Account readAccount(Long id);

@Secured("ROLE_TELLER")

public Account post(Account account, double amount);

}

public interface BankService {

@PreAuthorize("isAnonymous()")

public Account readAccount(Long id);

@PreAuthorize("hasAuthority('ROLE_TELLER')")

public Account post(Account account, double amount);

}

Page 12: Spring security configuration

ت

12

Spring Security https://ir.linkedin.com/in/ghorbanihamid قربانی حميد: کننده هيهت

نابع:م

http://docs.spring.io/autorepo/docs/spring-security/4.1.x/reference/htmlsingle/#filter-stack

http://docs.spring.io/spring-security/site/docs/3.1.x/reference/ns-config.html

http://www.baeldung.com/spring-security-login#web_xml

https://www.javacodegeeks.com/2013/11/spring-security-behind-the-scenes.html