做pc端网站咨询,做像百姓网这样网站多少钱,宁国网络推广,按钮特效网站目录
一、什么是跨站脚本攻击#xff08;XSS#xff09;
二、通常有哪些解决方案
三、常见的XSS攻击例子有哪些
3.1 存储型XSS攻击#xff08;黑产恶意截流#xff0c;跳转不法网站#xff09;
3.2反射型XSS攻击#xff1a;
四、什么是跨站请求伪造#xff1f;
五…目录
一、什么是跨站脚本攻击XSS
二、通常有哪些解决方案
三、常见的XSS攻击例子有哪些
3.1 存储型XSS攻击黑产恶意截流跳转不法网站
3.2反射型XSS攻击
四、什么是跨站请求伪造
五、常用跨站请求伪造解决方案有哪些
六、Springboot3.x整合Antisamy解决存储型XSS攻击
6.0 需求描述
6.1 Antisamy和Jsoup选型
6.2 Antisamy整合Springboot3.x详细步骤
第一步:引入pom.xml
第二步根据源码中的xml文件自定义自己需要的
第三步:将xml文件加载进Spring容器中
第四步:因Antisamy处理过文本后会默认在标签最后加入\n 所以加入这步骤去除\n 第五步:方法调用
第六步:方法调用中的后处理 一、什么是跨站脚本攻击XSS XSS攻击是指攻击者将恶意脚本注入到Web页面中当用户访问被注入的页面时 恶意脚本会在用户浏览器中执行从而窃取用户的敏感信息或进行其他恶意操作。 二、通常有哪些解决方案 对用户输入进行有效的过滤和验证特别是在展示用户输入内容时。 使用安全的编码机制如HTML编码和URL编码。 对Cookie设置HttpOnly属性限制脚本访问敏感信息。 阻止不受信任的域名或URL的内容插入到页面中 三、常见的XSS攻击例子有哪些
3.1 存储型XSS攻击黑产恶意截流跳转不法网站 攻击者将恶意脚本存储在目标网站的数据库中当其他用户访问包含该恶意脚本的页面时脚本会被执行 这种攻击利用了网站对用户输入的不当处理比如某个商品的评论列表用户进入这个页面则自动跳去其他页面 script var maliciousCode alert(你的账户信息已被攻击请输入密码并发送给攻击者); // 假设这里是漏洞存在的页面用户的输入没有进行过滤或转义 var userInput Hello, maliciousCode; document.getElementById(content).innerHTML userInput; // 恶意脚本被存储并执行 /script 3.2反射型XSS攻击 攻击者通过诱使受害者点击包含恶意脚本的特制链接将恶意脚本作为参数传递给目标网站 网站在返回响应时会将恶意脚本包含在其中并被浏览器执行 !-- 假设这里是漏洞存在的搜索页面用户的输入没有进行过滤或转义 -- form action/search methodGET input typetext namequery value button typesubmit搜索/button /form !-- 攻击者构造的恶意链接 -- a href/search?queryscriptalert(你的账户信息已被攻击请输入密码并发送给攻击者)/script点击此处获取免费礼品/a 四、什么是跨站请求伪造 跨站请求伪造Cross-Site Request ForgeryCSRF是一种利用受信任的用户身份执行未经授权的操作的攻击方式。 攻击者通过伪造请求利用用户在目标网站中的登录状态来执行恶意操作或窃取用户的敏感信息 五、常用跨站请求伪造解决方案有哪些 引入CSRF令牌token并将其包含到表单或请求中,校验Referer头部确保请求来自合法的来源。 String csrfToken UUID.randomUUID().toString(); response.addCookie(CookieUtil.generateCookie(_csrf_, csrfToken)); 使用验证码、双因素身份验证、HTTPS等也是增加安全性的有效措施以确保用户与目标网站的交互是安全和可信的 启用SameSite属性限制Cookie的发送防止未经用户许可的跨站请求。 六、Springboot3.x整合Antisamy解决存储型XSS攻击
6.0 需求描述
支持对输入的文本内容支持自定义标签属性拦截(比如 输入的内容中不可以包含BUTTON、INPUT)
支持对输入内容进行正则过滤(比如 img标签中 文件地址只可以是jpg后缀结尾的)
6.1 Antisamy和Jsoup选型
Antisamy是什么 AntiSamy是一个开源的Java库主要用于防止跨站脚本攻击XSS和CSS注入攻击。它通过对用户输入的HTML和CSS进行验证和清理确保其中不包含恶意代码 Jsoup是什么 Jsoup是一个用于处理HTML的Java库它提供了非常方便的API允许用户解析、修改和清理HTML文档。Jsoup专注于HTML的解析和操作而不直接涉及安全性验证。 单纯从标签的转义拦截上2者都是可以的当前需求中包含正则过滤等要求使用Jsoup实现比较麻烦需要二次代码覆盖开发固调研后采用Antisamy。
6.2 Antisamy整合Springboot3.x详细步骤
Antisamy源码地址:https://github.com/nahsra/antisamy/tree/v1.7.5
第一步:引入pom.xml dependencygroupIdorg.owasp.antisamy/groupIdartifactIdantisamy/artifactIdversion1.7.5/version/dependency
第二步根据源码中的xml文件自定义自己需要的 本博文中的xml是最基础的仅作参考样例使用需要了解配置详情的可以去其它博文或者官网查看本文重点在整合SpringBoot3.x
?xml version1.0 encodingISO-8859-1?!-- W3C rules retrieved from: http://www.w3.org/TR/html401/struct/global.html --!-- Slashdot allowed tags taken from Reply page: b i p br a ol ul li dl dt dd em strong tt blockquote divecode quote --anti-samy-rules xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:noNamespaceSchemaLocationantisamy.xsddirectivesdirective nameomitXmlDeclaration valuetrue /directive nameomitDoctypeDeclaration valuetrue /directive namemaxInputSize value5000 /directive nameformatOutput valuetrue /directive nameembedStyleSheets valuefalse //directivescommon-regexpsregexp nameimgTypesvalue^.*\.(gif|jpg|jpeg|png)$ /regexp nameanything value.* //common-regexpscommon-attributesattribute nameabbrregexp-listregexp nameanything //regexp-list/attribute//除了abbr属性之外其余都会被转义删除/common-attributesglobal-tag-attributesattribute nameabbr //global-tag-attributestags-to-encode/tags-to-encode
!-- tag-rules The configured label is allowed to pass--tag-rulestag namea actionvalidate ///除这里面配置的标签之外其余都会被转义删除tag nameimg actionvalidate //img标签的src中 文件后缀只能是gif|jpg|jpeg|png配置之一attribute namesrcregexp-listregexp nameimgTypes //regexp-list/attribute/tag/tag-rulescss-rules/css-rules!-- allowed-empty-tags Allow the tag to be empty, allow the tag inside the attribute does not belong to the tag, this case will not be escaped and deleted--allowed-empty-tagsliteral-listliteral valuea //literal-list/allowed-empty-tags/anti-samy-rules第三步:将xml文件加载进Spring容器中
Configuration
public class AntiSamyConfig {Beanpublic AntiSamyContent antiSamyBean() throws Exception{try (InputStream inputStream getClass().getResourceAsStream(/antisamy175/antisamy_custom.xml)) {Policy policy Policy.getInstance(inputStream);return new AntiSamyContent (policy);}}
}
注意文件存放路径,resources目录下建个 antisamy175 文件夹。再将xml放进去
第四步:因Antisamy处理过文本后会默认在标签最后加入\n 所以加入这步骤去除\n
public class AntiSamyOutputFormatter extends AntiSamySAXScanner {public AntiSamyOutputFormatter (Policy policy) {super(policy);}Overrideprotected OutputFormat getOutputFormat() {OutputFormat format super.getOutputFormat();format.setLineSeparator();//这是为了去除antisamy处理后在每行结尾自动匹配的\nreturn format;}}public class AntiSamyContent extends AntiSamy {private Policy policy null;public AntiSamyContent (Policy policy) {super(policy);this.policy policy;}public CleanResults scanMeetingAgenda(String taintedHTML) throws ScanException {return (new AntiSamyOutputFormatter (this.policy)).scan(taintedHTML);}
} 第五步:方法调用
htmlSanitizerService.sanitizeHtml(str);
第六步:方法调用中的后处理
antisamy处理结果在实际页面展示时会存在换行 回车等问题注重回显的需要对这块做额外的处理。
Service
public class HtmlSanitizerService {private AntiSamyContent antiSamy;Autowiredpublic HtmlSanitizerService(AntiSamyContent antiSamy) {this.antiSamy antiSamy;}public String sanitizeHtml(String sourceStr) {String cleanStr sourceStr;try{CleanResults cr antiSamy.scanMeetingAgenda(sourceStr);cleanStr cr.getCleanHTML();}catch (ScanException e){}return cleanStr;}
}
至此本次分享已结束。提及的文本过滤方式其最大的亮点在于其直观性和灵活性。我们无需编写冗长的Java代码逻辑而是可以直接通过修改XML配置文件来实现文本内容的过滤。更值得一提的是XML内部支持正则表达式的使用这使得过滤规则的设置变得更加简洁高效。相较于传统的文本处理库如jsoup这种方式不仅减少了代码量还提高了开发和维护的效率。
希望本次分享的内容能够为您在文本处理方面提供一些新的思路和方法。感谢您的阅读期待与您共同探讨更多有趣的技术话题