【web安全】如何防止xss攻击

2020-12-24 09:57发布

4条回答
20200921文 - 做更棒的自己!
2楼 · 2020-12-24 10:03

防御xss攻击需要重点掌握以下原则:


在将不可信数据插入到HTML标签之间时,对这些数据进行HTML Entity编码。


在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码。


在将不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码。


在将不可信数据插入到Style属性里时,对这些数据进行CSS编码。


在将不可信数据插入到HTML URL里时,对这些数据进行URL编码。


使用富文本时,使用XSS规则引擎进行编码过滤


XSS攻击,即跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,XSS是一种经常出现在web应用中的计算机安全。


茄子酱
3楼 · 2020-12-24 10:18
  1. 一、常见的恶意字符XSS输入:

    1. XSS 输入通常包含 JavaScript 脚本,如弹出恶意警告框:[removed]alert("XSS");[removed]

    2. XSS 输入也可能是 HTML 代码段,譬如:

    (1) 网页不停地刷新

    (2) 嵌入其它网站的链接

  2. 二、方法:利用php htmlentities()函数

    (1)、php防止XSS跨站脚本攻击的方法:是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数

  3. (2)、在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string)的话,第二个参数默认是ENT_COMPAT,函数默认只是转化双引号("),不对单引号(')做转义。

  4. (3)、htmlspecialchars()函数更多的时候要加上第二个参数,应该这样用:htmlspecialchars($string,ENT_QUOTES)。当然,如果需要不转化如何的引号,用htmlspecialchars($string,ENT_NOQUOTES)。

  5. (4)、另外,尽量少用htmlentities(), 在全部英文的时候htmlentities()和htmlspecialchars()没有区别,都可以达到目的。但是,中文情况下,htmlentities()却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

  6. (5)、htmlentities()和htmlspecialchars()这两个函数对单引号(')之类的字符串支持不好,都不能转化,所以用htmlentities()和htmlspecialchars()转化的字符串只能防止XSS攻击,不能防止SQL注入攻击。

  7. (6)、所有有打印的语句如echo,print等,在打印前都要使用htmlentities()进行过滤,这样可以防止XSS,注意中文要写出htmlentities($name,ENT_NOQUOTES,GB2312)。

小小收藏家
4楼 · 2020-12-24 10:22

1. 我们可以使用预编译语句(PreparedStatement,这样的话即使我们使用sql语句伪造成参数,到了服务端的时候,这个伪造sql语句的参数也只是简单的字符,并不能起到攻击的作用。
2. 数据库中密码不应明文存储的,可以对密码使用md5进行加密,为了加大破解成本,所以可以采用加盐的方式。

小橘子
5楼 · 2020-12-24 10:58

传统防御技术

2.1.1基于特征的防御

传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。

2.1.2 基于代码修改的防御

和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免:

1、对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

2、实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。

3、确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。

当然,如上方法将会降低Web业务系统的可用性,用户仅能输入少量的制定字符,人与系统间的交互被降到极致,仅适用于信息发布型站点。

并且考虑到很少有Web编码人员受过正规的安全培训,很难做到完全避免页面中的XSS漏洞。


相关问题推荐

  • 回答 12

    1.1 Web应用的漏洞分类1、信息泄露漏洞信息泄露漏洞是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。造成信息泄露主要有以下三种原因:–Web服务器配置存在问题,导致一...

  • 回答 7

    XSS 攻击有两大要素:攻击者提交恶意代码。浏览器执行恶意代码。针对第一个要素:我们是否能够在用户输入的过程,过滤掉用户输入的恶意代码呢?输入过滤在用户提交时,由前端过滤输入,然后提交到后端。这样做是否可行呢?答案是不可行。一旦攻击者绕过前端过...

  • 回答 10

    什么是XSS:XSS:Cross site script(跨站脚本) (缩写应该是css,为了和CSS(层叠样式表)做区分所以叫XSS)概念:黑客通过HTML注入篡改网页,插入恶意脚本,当用户在浏览网页时,实现控制用户浏览器行为的一种共计方式。常见危害:盗取用户信息、钓鱼、制造蠕虫...

  • 回答 8

    你应该是问的SQL注入吧!Sql注入攻击原理:使用用户输入的参数拼凑sql查询语句,使用户可以控制sql查询语句。预防方法,使用预编译语句,绑定变量,使用安全的存储过程,检查数据类型,使用安全函数。...

  • 回答 4

    可以检测出你网站中存在的漏洞 然后提示你 哪边需要加固一下什么的 主要是为了提高你网站的安全性吧,

  • 回答 5

    1.渗透目标渗透网站(这里指定为www.xxx.com)切记,在渗透之前要签订协议。2.信息收集建议手动检查和扫描器选择同时进行。2.1 网站常规检测(手动)1:浏览www.xxx.com1. 初步确定网站的类型:例如银行,医院,政府等。2. 查看网站功能模,比如是否有论坛,...

  • 回答 4

    如何防御XSS攻击?1. 对输入内容的特定字符进行编码,例如表示 html标记的 < > 等符号。 2. 对重要的 cookie设置 httpOnly, 防止客户端通过[removed]读取 cookie,此 HTTP头由服务端设置。 3. 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 ...

  • 回答 4

    客户端检测绕过(js检测):利用firebug禁用js或使用burp代理工具可轻易突破。服务端MIME检测绕过(Content-Type检测):使用burp代理,修改Content-Type的参数服务端扩展名检测绕过:文件名大小写绕过,例如Php,AsP等类似的文件名后缀名字双写嵌套,例如pph...

  • 回答 2

    解决方案请记住两条原则:过滤输入和转义输出。具体执行的方式有以下几点:第一、在输入方面对所有用户提交内容进行可靠的输入验证,提交内容包括URL、查询关键字、http头、post数据等;第二、在输出方面,在用户输内容中使用;标签,标签内的内容不会解释,...

  • 回答 3

    常见的 XSS 攻击有三种:反射型XSS攻击、DOM-based 型XXS攻击以及存储型XSS攻击。1.反射型XSS攻击反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者...

没有解决我的问题,去提问