我一直在研究 OWASP 建议以防止 CSRF 攻击(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)。
现在,我不明白的是,这将如何防止 XSS 和 CSRF 攻击的组合攻击。假设我们有以下攻击场景:
攻击者能够执行存储型 XSS 攻击,以便每次用户访问该页面时都会执行攻击者在网站上插入的脚本。
该脚本将完全重新设计 DOM,例如,攻击者的脚本不再需要用户提供一些不相关的信息的原始表单,而是重新设计该表单,以便将该表单重新设计为添加具有管理员权限的用户的表单。请注意,用户不会看到这一点,因为字段的标签将保持不变。只是 POST 会有所不同。
攻击者知道该网站使用反 CSRF 令牌。查看 OWASP 建议:“(..)应用程序应包含一个具有通用名称(如“CSRFToken”)的隐藏输入参数”,攻击者知道大多数网站在页面上的某处都会有一个带有此 id 的隐藏字段。
攻击者确保该字段的值也在伪造的 POST 中提交。即使攻击者不知道这个隐藏字段的值,它也可以在 POST 中指定该值应与请求一起发送。这是可能的,因为用户的 DOM 已被修改,请求将来自用户的浏览器,用户的 cookie 也会随请求一起发送。
用户提交表单,然后创建假用户。
在我看来,仅使用 CSRF 令牌无法避免这种情况。或者同步器模式的隐含假设是 XSS 攻击已被消除?
我想仔细检查一下并相信这对其他人会有帮助。如果有人在代码中使用 htmlspecialchars($var) 并运行 5.4 之前的 PHP 版本,那么他们就会对 utf-7 XSS 持开放态度。这是既定的。即使标头内容字符集是 utf-8,我是否正确假设该网站仍对 utf-7 XSS 开放,因为 PHP 的服务器内容字符集默认为 iso-8859-1?
编辑:有人问我希望从中获利什么。我希望确保项目不会受到 utf-7 的影响,因为有些程序员似乎不倾向于设置 htmlspecialchars 的第三个参数,即字符集。如果您了解我提到的服务器字符集以及它如何适合 utf-7,那么我真的需要您的帮助。
我一直在研究这个简单的搜索框来搜索表中的名称,我已经成功了,现在我一直在研究很多关于如何使这个搜索框容易受到攻击的内容(这是我正在做的一门课程要求) )。
当我输入时,<script>alert("boom!");</script>我的页面上会发出警报,但在我当前的代码中,它并没有真正做到这一点,我也不知道为什么,因为我使用jquery?
如果有人能看一下我的代码并使这段代码容易受到攻击,我将不胜感激:)
这是我的代码:
$(document).ready(function(){
$('#search').on('click', function(){
var term = $('#term').val().toLowerCase();
$.each(list,function(index,value){
var count = arrayInArray(term,list[index]);
console.log(count);
$("tr:eq(" + (count + 1) + ") td").each(function(){
var tb = [];
tb.push($(this).text());
console.log(tb); // data to be printed somewhere
});
});
});
});Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="input-group">
<input id="term" type="text" class="form-control" placeholder="Search Participant...">
<span class="input-group-btn">
<button id="search" class="btn btn-default" type="button">Search</button>
</span>
</div>Run Code Online (Sandbox Code Playgroud)
我正在经历使用 eval() 对于基于 XSS 的攻击的不良影响。我需要保护一段代码免受可能的 XSS 攻击,我猜 JSON.parse() 应该可以正常工作。
var request = new XMLHttpRequest();
var url = encDataPath + "/jcr:content/metadata.json?_charset_=utf-8";
url = Granite.HTTP.externalize(url);
request.open("GET", url ,false);
request.send(null);
var jsonData =eval("(" + request.responseText + ")"); // <-- here
var assetTitle = jsonData["dc:title"];
var mimetype = jsonData["dc:format"];
Run Code Online (Sandbox Code Playgroud)
有人可以建议我如何将eval()(jsonData)更改为JSON.parse?
我有这个链接
http://example.com/example.php?link=<link>&title=<title>&bild=<picturelink>&named=<text>
<>中的每个术语代表一个变量,可以由一个卑鄙的攻击者改变.
<named> = domain-name of <link>
Run Code Online (Sandbox Code Playgroud)
这是处理php文件
<?php
if(strpos($_GET[named],"known.com")!==false or
strpos($_GET[named],"known2.com")!==false or
strpos($_GET[named],"known3.com")!==false)
{
echo '<div align="center"><a href=' .
$_GET[link] .
' target="_blank"><img alt="' .
htmlentities(utf8_decode($_GET[title])) .
'" title="' . htmlentities(utf8_decode($_GET[title])) .
'" src=' . $_GET[bild] .
' border=0></a></div><br><br><b>' .
htmlentities(utf8_decode($_GET[title])) .
'</b><br><br><a href=' .
htmlentities($_GET[link]) .
' target="_blank" style="color: grey;">Text <i>' .
htmlentities(utf8_decode($_GET[title])) . '</i> text ' .
htmlentities($_GET[named]) . '!</a><br>(text)';
}
else
{
echo 'not allowed';
}
?>
Run Code Online (Sandbox Code Playgroud)
怎么能被攻击,你建议对php文件进行哪些更改?
我的网站上有文本框.此文本框使用form和post方法提供文本值.此表单在数据库中搜索特殊文本.如何确定sql injectin或xss的安全输入数据.