相关疑难解决方法(0)

Symfony2 + Twig中的验证(vs)消毒?

我需要我的用户在他们的个人资料中输入他们个人网站URI,以便其他用户可以看到并点击它.我担心如果输出没有正确消毒,这可能会导致XSS攻击.

就像下面这个非常简单的架构一样:


在此输入图像描述


我使用完整的堆栈symfony2框架,Doctrine作为ORM和Twig作为模板引擎.我知道Symfony提供了一些出色的验证工具,TWIG提供了自动输出转义(在这种特殊情况下不是必需的)以及一些用于输出消毒的过滤器.

我已经阅读了以下关于symfony2和twig如何处理清理的内容:

Doctrine附带数据库(SQL)注入的清理.除此之外,Symfony2中的控制器级别没有推荐/提供的输入清理.但是,在视图中使用Twig,可以进行输出清理.

例如,在CakePHP中:

数据清理作为实用程序实现,可以从任何地方访问(控制器,组件,模型甚至视图).它遵循一个使用一组固定的预定义清理过滤器的清理所有输入方法.使用专用规则消除特定输入是可能的,但似乎不鼓励.现有规则集中于SQL和HTML注入并过滤掉一般可疑的unicode字符.

1symfony2 + twig用户如何处理输入清理?他们是否完全放弃了输入清理,例如仅依靠验证?或者他们是否编写自己的效用函数来过滤用户输入?或者使用像owasp-esapi-php这样的库?

2symfony2 + twig用户如何处理输出清理?他们只依靠树枝引擎提供的过滤器吗?例如,是否已有任何工具可用于清理用户输入的URI,类似于此

3在这种情况下,您将如何处理数据库存储和显示用户输入的URI,如上例所示,您是否关心输入清理?或者你只会使用输出清理并按原样存储URI?

symfony twig

33
推荐指数
1
解决办法
8247
查看次数

jQuery的$ .get()可以安全地调用不受信任的URL吗?

我最近了解到,调用不受信任的URL$.getJSON()不安全的.怎么样$.get()$.get()当URL参数来自不受信任的来源时,jQuery是否可以安全地调用,或者这是不安全的?

这出现在我正在进行的安全代码审查中,以检查XSS漏洞.示例代码模式:

$.get(url, function (...) { ... })
Run Code Online (Sandbox Code Playgroud)

如果攻击者url恶意选择此代码模式是否会创建XSS漏洞?

请假设该函数将安全地处理来自AJAX请求的响应,并且url来自不受信任的来源(例如,其他一些用户)并且可以完全由对手控制.

我关注的是:如果url被攻击者选中,攻击者是否可以选择恶意URL(例如,包含callback=?并指向他们自己的站点,或类似的东西)导致jQuery猜测数据类型应该是JSONP,启用JSONP,在文档中插入脚本标记,并以与getJSON()相同的方式引入XSS漏洞?(因为我没有传递一个明确的dataType参数$.get(),jQuery会猜测数据类型,如文档中所述.我不确定它的安全含义是什么.)

我在代码审查中遇到了这种代码模式,我试图了解它是否是一个潜在的漏洞.我不是在寻找可以编写代码的替代方法; 相反,我想知道这种代码模式是否安全.


由于威胁模型有点棘手,让我举一个例子来帮助更好地理解这一点.假设Bob是该服务的用户,他可以提供与其个人资料相关联的URL.假设当Alice在浏览器中访问Bob的个人资料页面时,页面上的Javascript代码会获取Bob提供的URL并将其作为参数传递给$.get().问题是,这样安全吗?鲍勃可以用它来攻击爱丽丝吗?Bob可以触发Alice的浏览器执行任意的Javascript代码,拥有Alice的所有权力吗?正如相关问题所解释的那样,$.getJSON()在这种情况下是不安全的 - 但是呢$.get()?它也不安全,还是安全的?


由于我收到了一些澄清请求,让我尝试以不同的方式解释/提出问题.假设我正在进行代码审查以检查某些Javascript代码是否包含任何XSS漏洞,我看到以下代码行:

$.get(url, function(resp) { /* do nothing */ });
Run Code Online (Sandbox Code Playgroud)

假设我知道url攻击者可以完全控制它.这是否自动成为XSS漏洞?或者这总是安全吗?或者如果答案是"它取决于",它依赖于什么?

或者,另一种思考方式.假设我正在进行代码审查,我看到以下代码行:

$.get(url, f);
Run Code Online (Sandbox Code Playgroud)

假设我知道url攻击者可以完全控制它.我需要检查什么,以验证这是否安全(没有XSS错误)?我知道我需要检查代码f是否安全地处理响应,因为如果f不小心它可能会引入XSS错误.我的问题是:我唯一需要检查的是什么?或者这个代码模式总是一个XSS漏洞,无论f编码方式如何?

security xss ajax jquery json

21
推荐指数
3
解决办法
2053
查看次数

清理$ _GET参数以避免XSS和其他攻击

我有一个php的网站,包括()将内容嵌入到模板中.要加载的页面在get参数中给出,我将".php"添加到参数的末尾并包含该页面.我需要做一些安全检查以避免XSS或其他东西(不是mysql注入,因为我们没有数据库).我想出的是以下内容.

$page = $_GET['page'];

if(!strpos(strtolower($page), 'http') || !strpos($page, '/') ||
    !strpos($page, '\\') || !strpos($page, '..')) {
        //append ".php" to $page and include the page
Run Code Online (Sandbox Code Playgroud)

我还能做些什么来进一步消毒我的输入吗?

php sanitization

13
推荐指数
3
解决办法
4万
查看次数

如何清理用户提交的网址?

我想将用户的个人网址存储为纯文本,由htmlspecialchars()编码.

然后我会检索这些数据并生成并显示一个链接,如下所示:

echo '<a href="'.$retrieved_string.'" target="_blank">';
Run Code Online (Sandbox Code Playgroud)

然而,即使使用编码的特殊字符和引号,由于可能插入的javascript,错误链接的示例,href可能不安全:

javascript:alert(document.cookie);
Run Code Online (Sandbox Code Playgroud)

所以我想的是剥离潜在的'javascript'标签(当然我在进行特殊字符编码之前),如下所示:

preg_replace('/^javascript:?/', '', $submitted_and_trimmed_input);
Run Code Online (Sandbox Code Playgroud)

所以让我们完全总结一下:

$input=htmlspecialchars(preg_replace('/^javascript:?/', '', trim($_POST['link'])),11,'UTF-8',true);
mysql_query("update users set link='".mysql_real_escape_string($input)."'");

//And retrieving:

$query=mysql_query("select link from users");
$a=mysql_fetch_assoc($query);
echo '<a href="'.$a['link'].'" target="_blank">';
Run Code Online (Sandbox Code Playgroud)

现在的问题是,网址链接是否足够安全,或者是否有其他潜在的意外我应该警惕?

编辑:

我已经阅读了一些关于filter_var()的内容,它似乎在很多方面完全失败了.它不会使用unicode字符验证国际域,然后以下字符串再次成功通过测试:

http://example.com/"><script>alert(document.cookie)</script>
Run Code Online (Sandbox Code Playgroud)
  • 我的意思是共同的......那只是一种荒谬的,必须有更好的方法

php regex security url

11
推荐指数
2
解决办法
2万
查看次数

什么是URL的"足够的清理"

该URL将是

  1. 保存到MySQL数据库
  2. 用于在用户的个人资料上显示图片

strip_tags()和mysql_real_escape_string()就够了吗?

php mysql sanitization

8
推荐指数
1
解决办法
1万
查看次数

如何在 python 中 xss 清理 url

网上有很多关于这个话题的讨论。很多参考资料都说“你必须清理网址”。

甚至 Jeff Atwood 也有针对该主题的答案:Best way to handle security and avoid XSS with user input URLs这个答案必须被忽略,因为有评论指出它是错误的,但没有回应这些评论 - 所以这不是一个重复的问题。

但是,我在任何地方都找不到“具体来说,我如何清理 Python 中的 URL?”这个问题的直接答案,举个例子。

python xss

6
推荐指数
0
解决办法
685
查看次数

我应该清理托管CMS的HTML标记吗?

我正在寻找为客户启动托管类似CMS的服务.

如此,它将要求客户输入文本,该文本将提供给访问其网站的任何人.我打算使用Markdown,可能与大规模文本块的WMD(SO使用的实时降价预览)结合使用.

现在,我应该清理他们对html的输入吗?鉴于只有少数人编辑他们的"CMS",所有付费客户,我应该剥离坏HTML,还是应该让他们狂奔?毕竟,这是他们的"网站"

编辑:为什么我会这样做的主要原因是让他们使用自己的javascript,并拥有自己的CSS和div以及什么不输出

html xss sanitization

4
推荐指数
1
解决办法
1312
查看次数

link_to 中的 XSS 不安全参数值

Code Climate 在 html.haml 之一的这行代码上给了我一个“跨站脚本”错误:

= link_to 'Next', @redirect_uri, data: { no_turbolink: true }, class: 'btn btn-primary'
Run Code Online (Sandbox Code Playgroud)

在控制器中,@redirect_uri 是:

@redirect_uri = params[:redirect_uri] << "&show_more_pages=false"
Run Code Online (Sandbox Code Playgroud)

params[:redirect_uri] 是一个非常长的 url,其中包含重定向 uri。

究竟出了什么问题,我怎样才能让 Code Climate 满意?

ruby xss ruby-on-rails-4

4
推荐指数
1
解决办法
1140
查看次数

如何在 Python 中清理 url 字符串?

我有一个 python 应用程序,可以使用 URL 列表并生成 bash 脚本作为输出。

如何清理 URL,以便恶意用户无法注入将在我的基础设施上执行的 bash 命令。

例如:

http://www.circl.lu/a.php?rm -Rf /etc
Run Code Online (Sandbox Code Playgroud)

python url sanitize

4
推荐指数
1
解决办法
8671
查看次数

标签 统计

xss ×4

php ×3

sanitization ×3

python ×2

security ×2

url ×2

ajax ×1

html ×1

jquery ×1

json ×1

mysql ×1

regex ×1

ruby ×1

ruby-on-rails-4 ×1

sanitize ×1

symfony ×1

twig ×1