我正在将AngularJS整合到hackathon-starter中.这是我在这里用以下test.html和test.controller.js 提到的
<div>
The record: {{record}}
</div>
<div align="right">
<button class="btn btn-lg btn-primary" ng-click="createRecord()" onclick="window.location.href='/order/shipping'">
<i class=""> Create record</i>
</button>
</div>
Run Code Online (Sandbox Code Playgroud)
test.controller.js
(function () {
'use strict';
var injectParams = ['$scope', '$location', '$http'];
function TestController($scope, $location, $http) {
$scope.record = {
interId: 1,
sku: '107k',
category: 'Useful'
};
function createRecord(record) {
return $http.post('/order/create', record).then(function (response) {
return response.data;
})
}
$scope.createRecord = function () {
var record = $scope.record;
createRecord(record)
.then(function (data) {
if (data.success) {
return $location.url('/shipping'); …Run Code Online (Sandbox Code Playgroud) 我正在开发Web应用程序,并要求VAPT在发布前对其进行测试。
然后,我下载了Vega,并迅速扫描了我的Web应用程序,并遇到了VAPT问题,如下所示:
Vega检测到资源已设置了不安全的跨域资源共享(CORS)访问控制。CORS提供了允许服务器限制跨站点请求对某些受信任域的资源访问的机制。通过将“ Access-Control-Allow-Origin”响应标头的值设置为通配符值,所讨论的服务器已允许来自任何来源的资源。这带来了安全风险,因为任何站点都可以发出访问资源的请求,而不论其来源如何。
然后,我开始寻找解决方案来解决它,并发现这篇文章并filter按照答案中的建议实施了以下内容:
@Component
public class CORSFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods",
"POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(request, response);
}
public void destroy() {
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我再次针对Webapp扫描Vega时,它不再列出相同的问题,我相信这使我的Webapp免受了CSRF攻击。
现在,在阅读了这篇文章之后,我正在考虑如何request.getHeader("Origin")防止from …
我是打字稿的新手,并且在polyfill.js中使用了全局变量
(window as any).global = window;
Run Code Online (Sandbox Code Playgroud)
因此,出于安全性或XSS的目的,它易于使用。还是应该删除以找到其他路线? 谢谢,技术人员。
我正在使用Symfony2.1.它为表单提供内置的CSRF保护.CSRF令牌无效时返回的错误消息是:" CSRF令牌无效.请尝试重新提交表单 ".
我使用经典调用在Twig模板的表单顶部显示它:
{{ form_errors(form) }}
Run Code Online (Sandbox Code Playgroud)
如何更改返回的消息?
另一方面,更高级的可能性是捕获此错误类型,以便在我的Twig模板中显示许多选项/链接.任何的想法?
我正在为移动应用程序制作后端,并使用Django和Userena进行用户管理.我使用Django REST框架进行登录并注册,一切正常.我现在唯一需要做的就是实现"忘记密码"功能.我想使用已经实现的Userena,但是即使在使用csrf_exemptdectorator 之后我也无法摆脱"CSRF令牌丢失或错误"的错误.我在做什么?
urls.py
from django.contrib.auth.views import password_reset
from django.views.decorators.csrf import csrf_exempt
...
urlpatterns = patterns(
'',
url(r'^password/mobile/reset/$',
csrf_exempt(password_reset),
{'template_name': 'userena/password_reset_form.html',
'email_template_name': 'userena/emails/password_reset_message.txt',
'extra_context': {'without_usernames': userena_settings.USERENA_WITHOUT_USERNAMES}
},
name='userena_password_mobile_reset'),
)
Run Code Online (Sandbox Code Playgroud)
passowrd_reset_form.html
{% extends 'userena/base_userena.html' %}
{% load i18n %}
{% block title %}{% trans "Reset password" %}{% endblock %}
{% block content %}
<form action="" method="post">
<fieldset>
<legend>{% trans "Reset Password" %}</legend>
{% csrf_token %}
{{ form.as_p }}
</fieldset>
<input type="submit" value="{% trans "Send password" %}" />
</form>
{% …Run Code Online (Sandbox Code Playgroud) 我读了这个教程,它提供了一个很好的解释来防止CSRF,但它仍然从我的大脑中消失.根据方法一中的本教程,他们在每个请求中包含一个随机令牌.所以在形式上他们包括这样的东西:
<input type="hidden" name="<?php echo $token_id; ?>" value="<?php echo $token_value; ?>"
Run Code Online (Sandbox Code Playgroud)
在提交表格后,他们正在检查令牌是否匹配.
它如何帮助预防CSRF?
当攻击者向用户发送恶意链接时,我很困惑,当用户点击它时,根据我的说法,令牌每次都会匹配.
是否可以使用spring-security插件在grails3 app中配置CSRF保护,除了grails表单的useToken属性之外我找不到任何东西,然后在控制器内调用withForm.但这实际上不是一个非常灵活的解决方案.我喜欢像这里一样使用过滤器
我正在建立一个Rails博客.我正在使用Rails 5和Devise 4.2.0.该应用程序使用Nginx和Puma在Ubuntu Server上运行,并与Capistrano一起部署.在Nginx上启用HTTPS(使用有效的SSL证书)并在HTTP中添加301重定向格式之前,所有内容都非常适用于生产.
我检查了生产日志,日志中的真实性密钥与我在浏览器中看到的密钥不匹配.
这是我正在使用的nginx.conf文件:
upstream puma {
server unix:///home/deploy/apps/example-blog/shared/tmp/sockets/example-blog-puma.sock;
}
server { # Redirect HTTP to HTTPS
# Bind port(s)
listen 80;
listen [::]:80;
# Bind domain(s)
server_name blog.example.com;
# 301 redirect to HTTPS
return 301 https://$server_name$request_uri;
}
server { # Primary server block
# Bind port(s)
listen 443 default_server ssl;
# Bind domain(s)
server_name blog.example.com;
# Bind certificate(s)
ssl_certificate /etc/nginx/ssl/blog.example.com/ssl-bundle.crt;
ssl_certificate_key /etc/nginx/ssl/blog.example.com/blog.example.com.key;
root /home/deploy/apps/example-blog/current/public;
access_log /home/deploy/apps/example-blog/current/log/nginx.access.log;
error_log /home/deploy/apps/example-blog/current/log/nginx.error.log info;
location ^~ /assets/ {
gzip_static on;
expires max; …Run Code Online (Sandbox Code Playgroud) 由于在angular2和spring应用程序之间维护用户会话,我在java后端(在SecurityConfig.java文件中)启用了CSRF .但是当帖子提交被解雇时,我还没有看到任何绑定到POST请求的CSRF令牌.
如何将CSRF令牌添加到我的angular2应用程序中.(添加到帖子请求)
loginService.ts
userLogin(loginDTO){
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
var result = this._http.post(this._rest_service_login, JSON.stringify(loginDTO),options)
.map(res => res.json());
return result;
}
Run Code Online (Sandbox Code Playgroud) csrf spring-security csrf-protection spring-restcontroller angular
我已经阅读了有关Stack Overflow的其他问题,但没有找到明确的答案:
是什么阻止了攻击者通过JS窃取用户的CSRF令牌?他不能仅仅找到CSRF元素并用JS获得它的价值吗?
我对JS不太熟悉,但也许像这样:
document.getElementById("csrft_token").value
Run Code Online (Sandbox Code Playgroud) csrf-protection ×10
csrf ×4
angular ×2
security ×2
angularjs ×1
cors ×1
devise ×1
django ×1
django-csrf ×1
express ×1
grails ×1
grails-3.0 ×1
javascript ×1
nginx ×1
node.js ×1
php ×1
polyfills ×1
ssl ×1
symfony-2.1 ×1
typescript ×1