C# 使用JQuery Ajax和ASP.NET通用处理程序时必须采取的XSS和CSRF预防以外的安全措施
我是一名纯粹的ASP.NET开发人员,使用工具箱控件创建网站。但当我研究发现,使用纯JS/JQuery和通用处理程序创建的应用程序更吸引人、更吸引用户、性能更快时,我研究了它们。现在我正在创建一个完全基于JS业务逻辑的网站,并使用ASP.NET处理程序访问数据库。我使用ASPX页面作为开始,这样捆绑和路由等功能将由这些页面完成,我的开发速度将更快 当我考虑使用JavaScript可以进行的攻击时,我发现XSS和CSRF是纯JavaScript可以进行的两种攻击。我通过清理传输到服务器的文本来防止XSS攻击。通过使用CSRF令牌并将其保存到cookie中,并将该cookie值与通用处理程序中Ajax请求的令牌进行比较,可以防止CSRF攻击。这两种方法都很有效 但后来我开始思考我可能在应用程序中留下的任何其他循环漏洞。然后我想到了一个情景。以下是场景: 由于JS文件都是公开可见的,因此假设有一个函数C# 使用JQuery Ajax和ASP.NET通用处理程序时必须采取的XSS和CSRF预防以外的安全措施,c#,javascript,jquery,asp.net,ajax,C#,Javascript,Jquery,Asp.net,Ajax,我是一名纯粹的ASP.NET开发人员,使用工具箱控件创建网站。但当我研究发现,使用纯JS/JQuery和通用处理程序创建的应用程序更吸引人、更吸引用户、性能更快时,我研究了它们。现在我正在创建一个完全基于JS业务逻辑的网站,并使用ASP.NET处理程序访问数据库。我使用ASPX页面作为开始,这样捆绑和路由等功能将由这些页面完成,我的开发速度将更快 当我考虑使用JavaScript可以进行的攻击时,我发现XSS和CSRF是纯JavaScript可以进行的两种攻击。我通过清理传输到服务器的文本来防止
saveData(data)
,它将要保存在数据库中的数据和一个CSRF令牌发送给通用处理程序。现在假设攻击者使用浏览器(如chrome、opera、IE等)的Inspect元素功能调用此函数,然后
注入一个链接,如:
现在,当他单击这个注入的“Hack”链接时,saveData()
函数将向处理程序发送“IHackedYou”和CSRF令牌(因为它存储在JS文件中的全局变量中)。处理程序将授权此请求,因为CSRF令牌与cookie令牌相同,并将在数据库中存储不需要的数据。如果攻击者手动或使用某些自动系统单击链接一千次(或更多),情况会变得更糟。这将杀死我的数据库服务器
所以我想问一下这是什么类型的攻击,我应该如何防止它?不要依赖客户端验证
客户端完成的所有操作都必须在服务器端进行检查。这不是新的,即使在没有javascript的地方也适用。假设以下纯html表单:
<form>
<select name="fruit">
<option value="banana">Banana</option>
<option value="apple">Apple</option>
</select>
</form>
一旦用户提交了他的命令,就很容易直接使用客户端计算的totalPrice
,但是永远不会这样做。totalPrice
只能在客户端使用,以改善用户体验
有时这真的很重要,因为您必须重新实现相同的客户端和服务器端逻辑,这也是javascript服务器端解决方案最近流行的原因之一。我是否应该检查用户正在更新的特定内容是否属于他在服务器端?
{
"products": [
{"name": "banana", "price": 2.0, "quantity": 1},
{"name": "apple", "price": 3.0, "quantity": 2}
],
"totalPrice": 8.0
}