我正在尝试在网站背面设置CMS,但每当发布数据<a href=...时,帖子数据都会被废弃.
我有$config['global_xss_filtering'] = TRUE;配置
我的问题是有一种方法可以禁用一个项目的xss过滤吗?
例如
$this->input->post('content', true); - 打开它,但如何关闭它?
感谢大家.
PVS
从我所看到的一切来看,似乎在用户输入的内容上逃避html的惯例(为了防止XSS)是在渲染内容时这样做.大多数模板语言似乎默认都是这样做的,而且我遇到过像stackoverflow这样的问题,认为这个逻辑是表示层的工作.
所以我的问题是,为什么会这样呢?对我而言,在输入(即表单或模型验证)上逃避似乎更清晰,因此您可以假设数据库中的任何内容都可以安全地显示在页面上,原因如下:
多种输出格式 - 对于现代Web应用程序,您可能使用服务器端html呈现,使用ajax/JSON的javascript web应用程序和接收JSON的移动应用程序(可能有也可能没有某些webview,这可能是javascript应用程序或服务器呈现的HTML).所以你必须处理遍布各地的html.但是输入将始终在保存到db之前被实例化为模型(并经过验证),并且您的模型都可以从相同的基类继承.
您已经必须小心输入以防止代码注入攻击(授予这通常是抽象到ORM或db游标,但仍然),所以为什么不担心html转义到这里所以你不必担心任何事情安全相关的输出?
我很想听听关于为什么html在页面渲染上转义是首选的论点
杰夫实际上在Sanitize HTML中发布了这个.但他的例子是在C#中,我实际上对Java版本更感兴趣.有没有人有更好的Java版本?他的例子是否足以直接从C#转换为Java?
[更新]我已经对这个问题表示了赏心悦目,因为当我问这个问题时,SO并不那么受欢迎(*).至于与安全相关的任何事情,人们对它的看法越多,它就越好!
(*)事实上,我认为它仍处于封闭测试阶段
我需要从网站向另一个域中托管的REST Web服务发出AJAX请求.
虽然这在Internet Explorer中运行良好,但其他浏览器(如Mozilla和Google Chrome)实施了更为严格的安全限制,禁止跨站点AJAX请求.
问题是我无法控制域或托管站点的Web服务器.这意味着我的REST Web服务必须在其他地方运行,我无法实现任何重定向机制.
以下是进行异步调用的JavaScript代码:
var serviceUrl = "http://myservicedomain";
var payload = "<myRequest><content>Some content</content></myRequest>";
var request = new XMLHttpRequest();
request.open("POST", serviceUrl, true); // <-- This fails in Mozilla Firefox amongst other browsers
request.setRequestHeader("Content-type", "text/xml");
request.send(payload);
Run Code Online (Sandbox Code Playgroud)
如何在Internet Explorer旁边的其他浏览器中使用此功能?
我正在阅读有关CORS的内容,我认为实施既简单又有效.
但是,除非我遗漏了什么,否则我认为该规范中缺少一大部分内容.据我了解,根据请求的来源(以及可选地包括凭证)决定是否允许访问其资源,是外国站点.这可以.
但是,如果页面上的恶意代码想要将用户的敏感信息发布到外部站点,该怎么办?外国站点显然将验证请求.因此,如果我没有遗漏某些东西,CORS实际上会更容易窃取敏感信息.
我认为如果原始网站还可以提供其页面允许访问的不可变服务器列表,那将更有意义.
所以扩展的序列将是:
我知道恶意代码仍然可以使用JSONP来完成其脏工作,但我认为CORS的完整实现意味着关闭脚本标记多站点漏洞.
我还检查了官方的CORS规范(http://www.w3.org/TR/cors),但没有找到任何关于这个问题的提及.
假设我们有这种形式,用户注入恶意代码的可能部分如下所示
...
<input type=text name=username value=
<?php echo htmlspecialchars($_POST['username']); ?>>
...
Run Code Online (Sandbox Code Playgroud)
我们不能简单地添加标签或javascript:alert(); call,因为value将被解释为一个字符串,而htmlspecialchars会过滤掉<,>,',",所以我们不能用引号关闭这个值.
我们可以使用String.fromCode(.....)来绕过引号,但我仍然无法弹出一个简单的警告框.
有任何想法吗?
我很好奇,是什么让www.jsfiddle.net免受基于XSS的攻击?他们对帐户有一个支持,所以他们在浏览器上运行的任何脚本都可能做坏事.
在表单上接收用户输入时,我想检测"用户名"或"地址"等字段是否包含在XML(RSS提要)或(X)HTML(显示时)中具有特殊含义的标记.
那么这些是检测输入的输入是否在HTML和XML上下文中不包含任何特殊字符的正确方法中的哪一个?
if (mb_strpos($data, '<') === FALSE AND mb_strpos($data, '>') === FALSE)
Run Code Online (Sandbox Code Playgroud)
要么
if (htmlspecialchars($data, ENT_NOQUOTES, 'UTF-8') === $data)
Run Code Online (Sandbox Code Playgroud)
要么
if (preg_match("/[^\p{L}\-.']/u", $text)) // problem: also caches symbols
Run Code Online (Sandbox Code Playgroud)
我是否遗漏了其他任何内容,比如字节序列或其他棘手的方法来获取"javascript:"之类的标记标记?据我所知,所有XSS和CSFR攻击都需要<或>围绕这些值来让浏览器执行代码(至少从Internet Explorer 6或更高版本开始) - 这是正确的吗?
我不是在寻找减少或过滤输入的东西.我只是想在XML或HTML上下文中使用时找到危险的字符序列.(strip_tags()非常不安全.正如手册所说,它不会检查格式错误的HTML.)
我想我需要澄清一下,有很多人通过"逃避"或"过滤"危险角色来将这个问题误认为是关于基本安全的问题.这不是那个问题,而且大多数给出的简单答案无论如何也无法解决这个问题.
if (mb_strpos($data, '<') === FALSE AND mb_strpos($data, '>') === FALSE)既然数据在我的应用程序中,我会用它做两件事--1)以HTML格式显示 - 或者2)在格式元素内显示以进行编辑.
第一个在XML和HTML上下文中是安全的
<h2><?php print $input; ?></h2>'
<xml><item><?php print $input; ?></item></xml>
第二种形式更危险,但仍应安全:
<input value="<?php print htmlspecialchars($input, ENT_QUOTES, …
我有一个HTML文档,其中包含一个iframe.每当我尝试iframe使用JS 访问或修改它时,我都会得到Error: Permission denied to access property "document".
我正在使用frame.contentWindow.document.body.innerHTML或frame.contentWindow.document.body.onload类似的这些属性来访问或修改iframe.(在给定的代码iframe中称为frame.)
对于我正在开发的web-app,访问这些属性是必要的,我不能没有这些(或类似的替代品).
在这个链接:http://www.acunetix.com/websitesecurity/cross-site-scripting/下__CODE__,它说:__CODE__.我在阅读本文时的第一个问题是:如果应用程序部署在安全的服务器上(例如银行的情况),黑客如何才能访问网页的源代码?或者他可以在不访问源jsp的情况下注入恶意脚本吗?
xss ×10
javascript ×4
security ×4
html ×3
ajax ×2
php ×2
codeigniter ×1
cors ×1
iframe ×1
input ×1
java ×1
jsfiddle ×1
regex ×1
sanitization ×1