2016-08-15 4 views
7

मैं वेब सर्फ कर रहा था और आलेख Preventing CSRF with the same-site cookie attribute पाया।उसी साइट कुकी विशेषता के साथ सीएसआरएफ को रोकना

लिंक बनाए रखने के लिए हमें सेट-कुकी शीर्षलेख जोड़ने की आवश्यकता है।

सेट-कुकी: कुंजी = मान; केवल Http; समान साइट = सख्त

अब मेरा प्रश्न है, मैं इसे सभी कुकीज़ और प्रमाणीकरण कुकी में अपनी एएसपी.NET साइट में सेट करना चाहता हूं। मैंने आईआईएस से हेडर का उपयोग करके इसे सेट करने का प्रयास किया लेकिन कोई कहता है कि यह गलत तरीका कार्यान्वयन है।

मैंने नीचे भी कोशिश की है।

HttpCookie newAuthenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName 
        , FormsAuthentication.Encrypt(newAuthenticationTicket)) 
       { 
        HttpOnly = true 
       }; 
newAuthenticationCookie.Values.Add("SameSite", "strict"); 

लेकिन यह की तरह मेरी मदद नहीं लग रहे हैं।

कृपया मुझे ऐसा करने का एक बेहतर तरीका सुझाएं।

धन्यवाद।

उत्तर

12

HttpCookie Source पर दीप समीक्षा के बाद यह पुष्टि करता है कि हम कोड के साथ ऐसा नहीं कर सकते हैं, क्योंकि कुकी और कक्षा पर अतिरिक्त विशेषता जोड़ने का कोई तरीका नहीं है।

लेकिन फिर भी किसी भी तरह से मैं समाधान web.config के रूप में नीचे संशोधित करके लेते हैं।

<rewrite> 
    <outboundRules> 
    <rule name="Add SameSite" preCondition="No SameSite"> 
     <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" /> 
     <action type="Rewrite" value="{R:0}; SameSite=strict" /> 
     <conditions> 
     </conditions> 
    </rule> 
    <preConditions> 
     <preCondition name="No SameSite"> 
     <add input="{RESPONSE_Set_Cookie}" pattern="." /> 
     <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=strict" negate="true" /> 
     </preCondition> 
    </preConditions> 
    </outboundRules> 
</rewrite> 

यह प्रत्येक सेट कुकी पर SameSite = सख्त जोड़ें।

+0

https://twitter.com/blowdart/status/918140614167879680 यह .NET sooooon –

+0

में आ रहा है आप इसे कोड में कर सकते हैं, चेकआउट https://stackoverflow.com/a/48829569/4079967 –

2

क्योंकि इस दिन और उम्र हम Owin का उपयोग एक ही मूर्खतापूर्ण WebAPI कुकी बग को ठीक करने में ...

public class CookieSameSiteMiddleware : OwinMiddleware 
{ 
    public CookieSameSiteMiddleware(OwinMiddleware next) : base(next) 
    { 
    } 

    public override async Task Invoke(IOwinContext context) 
    { 
     var url = context.Request.Path.Value.ToLowerInvariant(); 

     if (url.Contains("/api/mylogin")) 
     { 
      context.Response.OnSendingHeaders(x => 
      { 
       var scv = context.Response.Headers.FirstOrDefault(h => h.Key == "Set-Cookie"); 
       if (!scv.Equals(default(KeyValuePair<string, string[]>))) 
       { 
        //context.Response.Headers.Remove("Set-Cookie"); 
        context.Response.Headers.Set("Set-Cookie", scv.Value[0] + "; SameSite=strict"); 
       } 

      }, null); 
     } 

     await this.Next.Invoke(context); 
    } 
} 

यकीन है कि मध्य-बर्तन .UseWebApi() से पहले पंजीकृत है

0

आप कर सकते हैं

0:

var httpCookie = new HttpCookie("mycookie", "myvalue"); 
httpCookie.Path += ";SameSite=Strict"; 

Response.SetCookie(httpCookie); 

यह आप निम्नलिखित हेडर दे देंगे: जब एक कुकी बनाने भी कोड में इस सेट

एक हैक का बिट जब तक यह ढांचे में धक्का नहीं दिया जाता है।

संबंधित मुद्दे