我正在实现无状态API,我的组织说我需要防范CSRF攻击.
我在网上发现了这个人的解决方案,并决定尝试实施一种仅限客户端的方法:http://blog.jdriven.com/2014/10/stateless-spring-security-part-1-stateless-csrf-protection/
以下是该网站为无状态解决方案所做的事情(如果网站出现故障):
- 客户端生成的CSRF-TOKENS.让客户端在Cookie和自定义HTTP标头中生成并发送相同的唯一秘密值.考虑到网站只允许为其自己的域读取/写入Cookie,只有真实站点可以在两个标头中发送相同的值.使用这种方法,您的服务器所要做的就是在每个请求的无状态基础上检查两个值是否相等!
 
不幸的是它不起作用.我的标题值永远不会匹配我的cookie值,在某些情况下,我的标题似乎只是匹配cookie值的一个请求.
这是我的Angular代码:
 app.config(['$httpProvider', function ($httpProvider) {
     //fancy random token
     function b(a){return a?(a^Math.random()*16>>a/4).toString(16):([1e16]+1e16).replace(/[01]/g,b)};
     $httpProvider.defaults.xsrfHeaderName = 'X-CSRF-TOKEN';
     $httpProvider.defaults.xsrfCookieName = 'CSRF-TOKEN';
     $httpProvider.interceptors.push(function () {
         return {
             'request': function (config) {
                 document.cookie = 'CSRF-TOKEN=' + b();
                 return config
             }
         };
     });
 }]);
Run Code Online (Sandbox Code Playgroud)
以下是正在发送的CSRF值的一些示例.
 CSRF-TOKEN=d25cf03a985d575ad48a863eac91467666
 X-CSRF-TOKEN:fa1f165df8b27195a90f5e7841108f4e42
 CSRF-TOKEN=d25cf03a985d575ad48a863eac91467666
 X-CSRF-TOKEN:fa1f165df8b27195a90f5e7841108f4e42
 CSRF-TOKEN=9c8dd46ed06c250b707ac0cb80a08a23ac
 X-CSRF-TOKEN:d25cf03a985d575ad48a863eac91467666
 CSRF-TOKEN=eb407a0303c21173fe4d0ae03c97eaea6d
 X-CSRF-TOKEN:0cf066bf83e50b5c74cb932ab8a47c94e8
 CSRF-TOKEN=506355a940a2ac5b48f363712b34570d73
 X-CSRF-TOKEN:eb407a0303c21173fe4d0ae03c97eaea6d
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我觉得我正在做那个家伙解决方案中的所有事情,但结果却是奇怪的结果.
我正在尝试在JavaScript中实现以下正则表达式的否定:
^(\d)\1+-(\d)\1+-(\d)\1+$
Run Code Online (Sandbox Code Playgroud)
该表达式符合以下内容:
而不是以下内容:
我希望它与那些场景相反.
我尝试了以下正则表达式,但它们不起作用:
^(?!(\d)\1+-(\d)\1+-(\d)\1+)$
^(?!(\d))\1+-(?!(\d))\1+-(?!(\d))\1+$
^(?!(\d)\1+)-(?!(\d)\1+)-(?!(\d)\1+)$
Run Code Online (Sandbox Code Playgroud)
我以为我对前瞻性的前瞻性有了深刻的理解,但显然没有.我在这做错了什么?有人能指出我正确的解决方案吗?
编辑:这是一个乱七八糟的链接当前的正则表达式:https://regex101.com/r/jY9mJ6/1
我正在编写一个实现ADFS 2.0的Web应用程序的问题.我能够让用户登录得很好,但我确实有用户需要能够退出应用程序以允许其他用户登录的情况.
当用户单击它通过以下方法运行的注销按钮时会发生什么:
    public void SignOut()
    {
        WSFederationAuthenticationModule.FederatedSignOut(new Uri(Properties.Settings.Default.ADFSIssuer),
            new Uri(Properties.Settings.Default.ADFSRealm));
    }
Run Code Online (Sandbox Code Playgroud)
我的ADFS Issuer是https://adfs.domain.com/adfs/ls/,我的ADFS Realm是我的Web应用程序的主要URL.
该应用程序似乎已经退出.当另一个用户单击"登录"按钮时,它会自动将其作为上一个用户登录,而不会提示输入凭据.
我查看了以下资源以获得帮助,但没有任何工作:
https://github.com/thinktecture/Thinktecture.IdentityServer.v2/issues/195 http://social.technet.microsoft.com/wiki/contents/articles/1439.ad-fs-how-to-invoke-a -ws-联合会-登录out.aspx
我不应该在不关闭浏览器的情况下注销ADFS应用程序吗?
When I load Package Manager Console within Visual Studio 2017 v15.9.6 in a project that uses Entity Framework I receive the following error:
\packages\EntityFramework.6.2.0\tools\init.ps1 cannot be loaded because its operation is blocked by software restriction policies, such as those created by using Group Policy. At line:1 char:45 + ... rgs+=$_}; & 'C:\Bitbucket\project-path\packages\EntityFramework.6.2. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : SecurityError: (:) [], PSSecurityException + FullyQualifiedErrorId : UnauthorizedAccess
This prevents me from running commands specific to Entity Framework like "Update-Database" or "Add-Migration". …
powershell entity-framework executionpolicy visual-studio-2017 package-manager-console
adfs2.0 ×1
angularjs ×1
c# ×1
cookies ×1
csrf ×1
http-headers ×1
javascript ×1
powershell ×1
regex ×1