当前位置: 首页 > news >正文

怎么快速建立一个网站/上海优质网站seo有哪些

怎么快速建立一个网站,上海优质网站seo有哪些,网络客服平台,无锡高端网站建设哪家好XSS 跨站脚本攻击: Cross-site scripting(简称xss)跨站脚本。 一种网站的安全漏洞的攻击,代码注入攻击的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使…

XSS 跨站脚本攻击:

Cross-site scripting(简称xss)跨站脚本。

一种网站的安全漏洞的攻击,代码注入攻击的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

例子:

<script>
$.ajax({url: $(location).attr('href') + "/comments",method: "POST",data: {  comment : { content: "啊哈哈哈~你看看你! (σ゚∀゚)σ゚∀゚)σ゚∀゚)σ" } },dataType: "JSON"
})
</script>

url: window.location.href + "/comments" 生成"http://localhost:3000/events/1/comments"

这主要是因为在views/events/show.html.erb中:

<% raw comment.content%>这行代码中有raw()方法

这个方法会输出所有字符,不会放过tag标签。去掉raw()后,content两边加上引号变为字符串。

但这样就不能插入img等有用的tag了。这时可以使用sanitize()方法。

str.html_safe方法

让字符串不会被检查,即字符串中的特殊字符如tag,不会被脱逸,这样黑客可能利用这点插入<script>脚本。

因此需要谨慎使用html_safe()。

Rails 默认会脱逸 HTML 的关系,所以 Rails 对 XSS 是有了基本的防御

向div标签就会被脱逸,使用content_tag()可以指定某个标签不被脱逸。



跨站请求伪造 Cross-site request forgery

也称为one-click attack, 简称CSRF或XSRF.

是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的

例子:

在任意位置插入恶意代码:如

<img src="/events/92/comments/522/highlight"> 伪装成是用户发送的请求。

防御方法:添加校验token

token是在非get请求中使用。因此需要看代码中关于修改数据库的请求,是否是用了get请求,如果是必须改成非get请求。这样img就不能攻击了。

Rails默认带了protect_from_forgery with: :exception ,⚠️5.2隐藏了这行code。

1. 这样在 Rails 产生的表单form中,就有带这个参数 authenticity_token。表单的提交就会进行token验证

<form class="new_comment" id="new_comment" action="/events/2/comments" accept-charset="UTF-8" method="post">

  <input name="utf8" type="hidden" value="✓">

  <input type="hidden" name="authenticity_token" value="fMv3c2b177kqsy/LuDIARp+RaQWJtBHwfQkbEV8j5wqNVFFSBqvcotvkeV07hiQpWsQY1RIEdpVMvE4vysEHiA==">
  <div class="form-group">
    <label for="comment_content">Content</label>
    <textarea class="form-control" name="comment[content]" id="comment_content"></textarea>
  </div>

  <div class="form-group">
    <input type="submit" name="commit" value="Comment" class="btn btn-primary" data-disable-with="Comment">
  </div>
</form>

2. 如果是Rails.ajax中的请求:就会抓 meta 中的 csrf-token 参数附加到请求中。和form中的value是一样的。

Rails.ajax()方法,会抓取csrfToken。校验token。

在csrf.coffee中:

csrfToken = Rails.csrfToken = ->
   meta = document.querySelector('meta[name=csrf-token]')
 meta and meta.content

得到:

<meta name="csrf-token" content="fMv3c2b177kqsy/LuDIARp+RaQWJtBHwfQkbEV8j5wqNVFFSBqvcotvkeV07hiQpWsQY1RIEdpVMvE4vysEHiA==">

这样,黑客在其他网站上挖的坑因为没有这个authenticity_token或csrf-token(两者值一样),他发送的请求就会被挡住。



SQL Injection 数据库注入攻击structured query language.

@comments = @comments.where( "comments.content LIKE '%#{params[:keyword]}%'")

转换:

SELECT "comments".* FROM "comments" WHERE "comments"."event_id" = ? AND (comments.content LIKE '%这是搜寻关键字%') [["event_id", 95]]

如果收到的参数是

sorry'); DELETE * FROM comments; --

转换为sql就成了3句代码:

SELECT "comments".* FROM "comments" WHERE "comments"."event_id" = ? AND (comments.content LIKE '%sorry');DELETE * FROM comments;   --%') [["event_id", 95]]

第一句是查询,第二句就成了删除了!!, --后面代表了注释。

问题的原因:是查询语法使用string造成的。

这样单引号,\backslash就会起到了它的作用。

可以使用quote_string(s)方法来给一个string逸出单引号和反斜杠。

keyword = ActiveRecord::Base::connection.quote_string( params[:keyword] )

又因为查询语法where经常用到,所以增加了简单的写法, 自动逸出:

@comments = @comments.where( "comments.content LIKE ?", "%#{params[:keyword]}%")
@registrations = Registraion.where( :status => params[:status] ) # Hash 写法,这是安全的
@registrations = Registraion.where( "status = ?", params[:status] ) # Array 写法,这是安全的

但order等语法,没做自动逸出: (点击查看所有需要注意的sql语法)

可以使用白名单:

app/views/events/show.html.erb

<p>
<%= link_to "新留言在上", event_path(@event, :sort => "id DESC") %>
<%= link_to "舊留言在上", event_path(@event, :sort => "id ASC") %>
</p>

app/controllers/events_controller.rb

-  if params[:sort] # 本来这样有漏洞,你太相信用户传进来的参数了
+  if params[:sort] && ["id DESC", "id ASC"].include?(params[:sort])  # 只有白名单内的参数可以用@comments = @comments.order(params[:sort])end

Delete_all和 Destroy_all

都要小心使用!。它们都接受和find()方法相同的条件参数。参数可以是string, array, hash。但Strings不会被脱逸, 所以安全的写法是只用array, hash做参数。

Destroy_all因为会实例化记录并调用destroy方法并调用callbacks,相对比delete_all安全。

params[:admin] = "') OR 1=1--'"
User.destroy_all(["id = ? AND admin = '#{params[:admin]}", params[:id]])

生成:SELECT "users".* FROM "users" WHERE (id = NULL AND admin = '') OR 1=1--')

这会删除所有users。

Exists?()方法。

他用来判断一条记录是否存在。参数一般是一个主键。如果参数是array或hash,它被当成一个条件option。

为了安全,参数最好是一个integer或string。

Group()方法

他可以接受任意的SQL string。因此

params[:group] = "name UNION SELECT * FROM users"
User.where(:admin => false).group(params[:group])

生成 :

SELECT "users".* FROM "users" WHERE "users"."admin" = ? GROUP BY name UNION SELECT * FROM users

因为union了另外一条sql,因此返回所有的users。

Having()方法

容易遭到Sql injection攻击,因为它一般在一条rails查询语句的最后。

Joins方法

它可以接收一个关联数组或直接的SQl string。因此也可能会遭到注入攻击。

Select(*fields)方法

因为select子句一般在一个查询的开头,所以几乎任何sql都可以注入并生效。

params[:column] = "* FROM users WHERE admin = 't' ;"
User.select(params[:column])

Query

SELECT * FROM users WHERE admin = 't' ; FROM "users"

Result:返回的是一个关系对象。

#<ActiveRecord::Relation [#<User id: 84, name: "Admin", password: "supersecretpass", age: 45, admin: true, created_at: "2016-11-11 18:51:41", updated_at: "2016-11-11 18:51:41">]>

select有2种用法:

  1. 修改select声明,检索指定的fields。返回一个对象关系a relation object。可以在后面添加其他查询方法。
  2. 接受一个块{}, 类似Array#select。从数据库中得到一个array对象的集合。

Pluck(*column_names)

从一个table中选择指定的column。接受任何Sql。所以容易收到注入攻击。返回一个array对象集合。



大量赋值(Mass Assignment)的漏洞

rails5增加了strong parameters

params.require(:XXX).permit(:column_name, ...)限定了可以传入什么参数。

但也要谨慎使用。关键的列,即使隐藏,也可以通过url修改。所以应该留意一个column是否是要传入的,如果不是,就别加入白名单。

如果hacker在chrome浏览器的inspect上修改参数,

log上会显示:Unpermitted parameter: role



破解加密 Cookie-based Session(太复杂,只了解了一下)

 密匙不能外泄,如果外泄,必须马上更换。rails可以更换session的存储方法。


 Module: Base64 (defined in lib/base64.rb)

这个模块提供了binary data的编码和解码。

require "base64"enc   = Base64.encode64('Send reinforcements')# -> "U2VuZCByZWluZm9yY2VtZW50cw==\n"
plain = Base64.decode64(enc)# -> "Send reinforcements"

Module OpenSSl

这个模块提供了生成密码的算法。它包裹了OpenSSL library.



 DoS 拒绝服务攻击

denial of service attack, distributed denial of service attack分布拒绝服务攻击。

对自己的网站叫做压力测试

安装wrk:(https://github.com/wg/wrk)

执行 brew install wrk

执行 wrk -t12 -c400 -d30s http://localhost:3000/products

t:thread

c: connection, HTTP连接的总数,每个thread处理 connections/threads个连接。

d: duration of the test 例子: 2s, 2m, 2h

如何防御ddos攻击:

可以使用gem 'rack-attack'

# In config/application.rbconfig.middleware.use Rack::Attack

然后新建config/initializers/rack_attack.rb

把这个网址的案例代码粘体过来https://github.com/kickstarter/rack-attack/wiki/Example-Configuration

还有很多具体设置。如果真的面料大量ddos攻击,必须购买专业的网络防火墙。百度安全,云盾ddos高防IP.


安全分析工具

gem 'brakeman'(4800✨) 一个静态分享工具。检查Rails程序的安全弱点。

group :development dogem 'brakeman'
end

然后在程序根目录执行brakeman, 或者在非根目录执行 brakeman /path/to/rails/application

结果是参考,不代表一定是漏洞。需要逐条检查。

另外gem 也可能有安全漏洞,gem 'bundler-audit'可以检查(1700✨)


密码是如何存储的?

散列函数是一种能将数据变成摘要(digest)的算法,Hash function,散列算法,哈希函数。

通过把数据压缩成小的数字,让数据量变小,将数据的格式固定下来。

执行 irb,然后输入以下代码实验看看:

require 'digest'
Digest::SHA1.hexdigest '12345678'

得到 "7c222fb2927d828af22f592134e8932480637c0d"

散列函数有一些特性:

  1. 相同的数据,每次都会得到一样的摘要
  2. 是单向的,无法逆推:只知道摘要的话,没有办法能够透过计算知道本来的数据长怎样。例如给你 7c222fb2927d828af22f592134e8932480637c0d,没有算法可以逆推回来。除非有一个对照的字典

散列函数的用途:

可以用来比较两个文档是否相同,而无需实际比较文档内容:

1.git commit每次都会产生digest。不同的digest代表了不同的内容。

2.网络传档,也可以透过比较digest,看是否下载了完整的档案。

3.Rails中,Asset pipeline会将CSS和javascript压缩。档案就是透过散列函数产生的。

4.devise中的密码,也是使用散列函数生成的.

User model中,users table的实际字段是 t.string "encrypted_password"。用户注册时输入的密码在储存入数据库时会先变为散列函数,digest。数据库并不储存明码。

因此,数据库管理员也不会知道用户的真正密码。一旦数据库泄露,密码也安全。

判断一个网站是否使用明码做密码,可以请求忘记密码,看是否是邮寄给你源码还是重设。

相关文章:

网络安全:攻击和防御练习(全战课), DDos压力测试

XSS 跨站脚本攻击&#xff1a; Cross-site scripting&#xff08;简称xss&#xff09;跨站脚本。 一种网站的安全漏洞的攻击&#xff0c;代码注入攻击的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法注入恶意指令代码到网页&#xff0c;使…...

【落羽的落羽 C语言篇】指针·之其五

文章目录 一、冒泡排序二、qsort排序1. qsort使用指南2.回调函数3. qsort函数的模拟实现 一、冒泡排序 冒泡排序的核心思想就是&#xff1a;两两相邻的元素进行比较和交换。 现在&#xff0c;我们想编写一个函数&#xff0c;使它能够运用冒泡排序的原理&#xff0c;由小到大排…...

go的web框架介绍

Go 语言有许多优秀的 Web 框架&#xff0c;适用于不同类型的 Web 应用开发&#xff0c;涵盖从简单的 API 开发到复杂的微服务架构。以下是一些常见的 Go Web 框架&#xff1a; 1. Gin 简介&#xff1a;Gin 是一个高性能的 Go Web 框架&#xff0c;设计目标是让开发者能够以极…...

基于群晖搭建个人图书架-TaleBook based on Docker

前言 在群晖Container Manager中部署失败&#xff0c;转通过ssh部署。 一、准备工作 名称备注群晖SSH“终端机和SNMP”中启用SSH软件secureCRT等docker-compose.ymlGithub下载并修改 二、过程 2.1 创建本地文件夹 本地路径为&#xff1a; /docker/Calibre/data 2.2 下载d…...

redis哨兵安装部署

1、下载redis安装包&#xff0c;上传到3台服务器上 redis.tar.gz 解压处理 2、分别编译安装 cd redis/src make make install 3、配置哨兵模式 修改redis.conf文件内容 主节点 和 从节点都需要修改 bind 0.0.0.0 -::1 或者真实的ip地址 protected-mode no port 637…...

JVS低代码里表单与表格不同数据关联场景的实现方法

在业务处理与数据管理中&#xff0c;表单与表格模型的数据关联及同步保存是一个常见的需求。特别是在涉及多个数据模型且字段存在关联或差异时&#xff0c;合理设计表单与表格之间的数据交互逻辑特别重要。接下来小编以JVS低代码系统为例&#xff0c;详细介绍两种不同场景下&am…...

NaviveUI框架的使用 ——安装与引入(图标安装与引入)

文章目录 概述安装直接引入引入图标样式库 概述 &#x1f349;Naive UI 是一个轻量、现代化且易于使用的 Vue 3 UI 组件库&#xff0c;它提供了一组简洁、易用且功能强大的组件&#xff0c;旨在为开发者提供更高效的开发体验&#xff0c;特别是对于构建现代化的 web 应用程序。…...

Cannot resolve symbol ‘ActivityThread‘ | Android 语法

背景 ActivityThread 是 Android 系统内部使用的一个类,它位于 android.app 包中,但在 Android SDK 的公共 API 中并没有公开。 由于 ActivityThread 是隐藏的内部类,因此在编写单元测试或功能开发时,无法直接引用它。可以使用反射来访问内部 API,或者使用依赖注入的方式…...

OpenSSH-9.9p1 OpenSSL-3.4.0 升级步骤详细

前言 收到漏洞扫描通知 OpenSSH 安全漏洞(CVE-2023-38408) OpenSSH 安全漏洞(CVE-2023-51385) OpenSSH 安全漏洞(CVE-2023-51384) OpenSSH 安全漏洞(CVE-2023-51767) OpenSSH 安全漏洞(CVE-2023-48795) OpenSSH&#xff08;OpenBSD SecureShell&#xff09;是加拿大OpenBSD计划…...

python 练习题

目录 1&#xff0c;输入三个整数&#xff0c;按升序输出 2&#xff0c;输入年份及1-12月份&#xff0c;判断月份属于大月&#xff0c;小月&#xff0c;闰月&#xff0c;平月&#xff0c;并输出本月天数 3&#xff0c;输入一个整数&#xff0c;显示其所有是素数因子 4&#…...

数学建模——Topsis法

数模评价类&#xff08;2&#xff09;——Topsis法 概述 Topsis:Technique for Order Preference by Similarity to Ideal Solution 也称优劣解距离法&#xff0c;该方法的基本思想是&#xff0c;通过计算每个备选方案与理想解和负理想解之间的距离&#xff0c;从而评估每个…...

Electron-vue 框架升级 Babel7 并支持electron-preload webapck 4 打包过程记录

前言 我这边一直用的electron-vue框架是基于electron 21版本的&#xff0c;electron 29版本追加了很多新功能&#xff0c;但是这些新功能对开发者不友好&#xff0c;对electron构建出来的软件&#xff0c;使用者更安全&#xff0c;所以&#xff0c;我暂时不想研究electron 29版…...

github仓库自动同步到gitee

Github Actions是Github推出的自动化CI/CD的功能&#xff0c;我们将使用Github Actions让Github仓库同步到Gitee 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中&#xff0c;所以我们需要以下几个步骤 生成 SSH 公私钥添加公钥添加私钥配…...

汽车仪表板可识别安全气囊,安全带,ABS,邮箱,灯等多种告警参数,YOLO,VOC,COCO三种方式标记的数据集整理

关于数据集介绍&#xff1a; 汽车仪表板可识别安全气囊&#xff0c;安全带&#xff0c;ABS&#xff0c;邮箱&#xff0c;灯等多种告警参数&#xff0c;YOLO&#xff0c;VOC&#xff0c;COCO三种方式标记的数据集。 可识别常见的&#xff1a; 安全气囊和安全带系统 &#xff0c;…...

springboot370高校宣讲会管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校宣讲会管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c…...

GoReplay开源工具使用教程

目录 一、GoReplay环境搭建 1、Mac、Linux安装GoReplay环境 二、GoReplay录制与重播 1、搭建练习接口 2、录制命令 3、重播命令 三、GoReplay单个命令 1、常用命令 2、其他命令 3、命令示例 4、性能测试 5、正则表达式 四、gorepaly组合命令 1、组合命令实例 2、…...

UE4_材质节点_有关距离的_流体模拟

一、材质节点介绍&#xff1a; 特别注意&#xff1a;距离场需要独立显卡支持。 1、什么是距离场&#xff1f; 想象一下空间中只有两个实体, 一个球,一个圆柱. 空间由无数个点组成, 取其中任何一个点, 比如,它跟球面的最近距离是3, 跟圆柱面的最近距离是2, 那么这个点的值就…...

虚拟现实(VR)与增强现实(AR)有什么区别?

虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;与增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;在多个方面存在显著差异。以下是对这两者的详细比较&#xff1a; 一、概念定义 虚拟现实&#xff08;VR&#xff09;&#xff1a; 是一种…...

浏览器中输入一个URL后,按下回车后发生了什么

URL &#xff0c;统一资源定位符&#xff0c; 简单点就是网址 ip 或域名 端口号 资源位置 参数 锚点 大致流程 URL 解析DNS 查询TCP 连接处理请求接受响应渲染页面 1 &#xff0e;输入一个网址之后&#xff0c;首先浏览器通过查询 DNS &#xff0c;查找这个 URL 的 IP …...

GNOME(GNU Network Object Model Environment)

定义与概述 GNOME&#xff08;GNU Network Object Model Environment&#xff09;是一种广泛使用的桌面环境。它是一个自由软件项目&#xff0c;旨在为操作系统提供一个直观、易用且功能强大的图形用户界面&#xff08;GUI&#xff09;。GNOME主要运行在类UNIX操作系统上&#…...

源码分析之Openlayers中的Collection类

概述 在Map类中,有一种高频出现的类Collection(即集合),比如Map类中interaction、controls和overlay的定义初始化和一些操作调用都和Collection有关。本文主要介绍 Openlayers 中Collection类的实现以及Collection类的事件机制。 源码剖析 Collection类 Collection类本质…...

Spring AI 框架介绍

Spring AI是一个面向人工智能工程的应用框架。它的目标是将Spring生态系统的设计原则&#xff08;如可移植性和模块化设计&#xff09;应用于AI领域&#xff0c;并推广使用pojo作为AI领域应用的构建模块。 概述 Spring AI 现在(2024/12)已经支持语言&#xff0c;图像&#xf…...

【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用

UPDATE 和 DELETE 操作的正确使用 UPDATE 和 DELETE 是 Oracle 11g 中用于修改和删除表中数据的重要 SQL 语句。在操作时&#xff0c;需特别注意数据筛选条件的准确性&#xff0c;以避免意外更改或删除数据。本文将详细介绍这两种语句的用法、注意事项及相关案例。 一、UPDATE…...

Advanced Macro Techniques in C/C++: `#`, `##`, and Variadic Macros

Advanced Macro Techniques in C/C: #, ##, and Variadic Macros 文章目录 Advanced Macro Techniques in C/C: #, ##, and Variadic MacrosIllustrative Examples of Macros Using # and ##Stringification ExampleToken Concatenation ExampleNested Macros Example Key Conc…...

Maven、JAVAWeb、Servlet

知识点目标 1、MavenMaven是什么Maven项目的目录结构Maven的Pom文件Maven的命令Maven依赖管理Maven仓库JavaWeb项目 2.网络基础知识 3、ServletMaven Maven是什么 Maven是Java的项目管理工具&#xff0c;可以构建&#xff0c;打包&#xff0c;部署项目&#xff0c;还可以管理…...

分布式资源调度——yarn 概述(资源调度基本架构和高可用的实现)

此文章是学习笔记&#xff0c;图片均来源于B站&#xff1a;哈喽鹏程 yarn详细介绍 1、yarn 简介1.1 yarn的简介1.2 yarn 的基本架构1.3. yarn 的高可用 2、yarn 调度策略、运维、监控2.1 yarn 的调度策略2.1.1 FIFO scheduler(先进先出)2.1.2 容量调度2.1.3 公平调度 2.2 yarn…...

网页开发的http基础知识

请求方式-GET&#xff1a;请求参数在请求行中&#xff0c;没有请求体&#xff0c;如&#xff1a;/brand/findAll?nameoPPo&status1。GET请求大小在浏览器中是有限制的请求方式-POST&#xff1a;请求参数在请求体中&#xff0c;POST请求大小是没有限制的 HTTP请求&#xf…...

学习方法的进一步迭代————4

今天又在怀疑第二大脑的可靠程度 为什么呢? 还是因为自己没记住东西&#xff0c;感觉没学到东西。 其实自己知道大脑本就不应该用来存放知识而是用来思考知识&#xff0c;但是自己还是陷在里面了&#xff0c;我觉得其本质不是因为认知还不够&#xff0c;也不是因为还有点不适…...

数据科学家创建识别假图像的工具

Pixelator v2 是一款用于识别假图像的工具。它采用了全新的图像真实性技术组合&#xff0c;其能力超出了人眼所能看到的范围。 它能够以比传统方法更高的准确度识别图像中的细微差异&#xff0c;并且已被证明能够检测到小至 1 个像素的交替。 使用 SSIM 和 Pixelator v2 突出显…...

使用 GORM 与 MySQL 数据库进行交互来实现增删改查(CRUD)操作

1、安装 GORM 和 MySQL 驱动 新版本库是gorm.io/gorm go get -u gorm.io/gormgo get -u gorm.io/driver/mysql2、连接 MySQL 数据库 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm""log" )func main() {// 数据源名称 (DSN) 格式&a…...