标签: sanitization

如何在Java中清理HTML代码以防止XSS攻击?

我正在寻找class/util等来清理HTML代码,即删除危险的标签,属性和值以避免XSS和类似的攻击.

我从富文本编辑器(例如TinyMCE)获取html代码,但它可以通过恶意方式发送,省略TinyMCE验证("异地提交的数据").

在PHP中有什么像InputFilter一样简单易用吗?我能想象的完美解决方案就是这样(假设清理程序封装在HtmlSanitizer类中):

String unsanitized = "...<...>...";           // some potentially 
                                              // dangerous html here on input

HtmlSanitizer sat = new HtmlSanitizer();      // sanitizer util class created

String sanitized = sat.sanitize(unsanitized); // voila - sanitized is safe...
Run Code Online (Sandbox Code Playgroud)

更新 - 更简单的解决方案,越多越好!小的util类对其他库/框架的外部依赖性尽可能小 - 对我来说是最好的.


那个怎么样?

html java xss sanitization

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

如何将字符串转换为安全的SQL字符串?

我正在从一堆文本文件中生成一些sql insert语句.

这些文本文件通常是用户输入数据.我想清理这些数据,以便它不会破坏插入语句.

例如,一些输入数据,人们使用了"不要"这个词.不会导致sql语句认为字符串已经结束并因此导致错误.

有没有我可以调用的.NET方法将所有这些字符转换为转义码或安全字符?

.net sql sanitization

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

检测字符串输入是否包含HTML的正确方法是什么?

在表单上接收用户输入时,我想检测"用户名"或"地址"等字段是否包含在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.)

更新

我想我需要澄清一下,有很多人通过"逃避"或"过滤"危险角色来这个问题误认为是关于基本安全的问题.这不是那个问题,而且大多数给出的简单答案无论如何也无法解决这个问题.

更新2:示例

  • 用户提交输入
  • 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 php xss sanitization input

23
推荐指数
3
解决办法
4896
查看次数

如何在Perl中清理无效的UTF-8?

我的Perl程序从磁盘文件中获取一些文本作为输入,将其包装在某些XML中,然后将其输出到STDOUT.输入名义上是UTF-8,但有时会插入垃圾.我需要清理输出,以便不会发出无效的UTF-8八位字节,否则下游消费者(Sphinx)会爆炸.

至少,我想知道,如果数据是无效的,所以我能避免将它传递出去; 理想情况下,我只能删除有问题的字节.然而,启用我能找到的所有宿命论并不能让我在那里使用perl 5.12(FWIW,use v5.12; use warnings qw( FATAL utf8 );已生效).

我特别在顺序方面遇到麻烦"\xFE\xBF\xBE".如果我创建一个只包含这三个字节的文件(perl -e 'print "\xEF\xBF\xBE"' > bad.txt),尝试读取模式:encoding(UTF-8)错误的文件utf8 "\xFFFE" does not map to Unicode,但仅在5.14.0之下.5.12.3及更早版本是非常精细的阅读和后来写的序列.我不确定从哪里获得\xFFFE(非法反向BOM),但至少有一个投诉与Sphinx一致.

不幸的是,decode_utf8("\xEF\xBF\xBE", 1)在5.12或5.14下没有错误.我更喜欢不需要编码I/O层的检测方法,因为这只会给我留下错误信息并且无法清理原始八位字节.

我确信我需要解决更多的序列,但只是处理这个序列将是一个开始.所以我的问题是:在5.14之前用perl可以可靠地检测到这种问题数据吗?什么替代例程通常可以将几乎UTF-8清理成严格的UTF-8?

perl sanitization utf-8

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

正则表达式清理(PHP)

我想清理URL中的字符串,这是我基本上需要的.

  1. 除字母数字字符和空格以及虚线外,必须删除所有内容.
  2. 空间应该转换成破折号.

例如.

This, is the URL!
Run Code Online (Sandbox Code Playgroud)

必须回来

this-is-the-url
Run Code Online (Sandbox Code Playgroud)

php regex sanitization preg-replace

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

防止LDAP注入

我正在研究第一个查询LDAP的桌面应用程序.我正在使用unix并使用opends在C中工作,而且我是LDAP的新手.经过一段时间的努力,我注意到用户可以通过注入恶意代码来改变LDAP查询.
我想知道哪些消毒技术是已知的,不仅用于C/unix开发,而且用于更一般的术语,即web开发等.
我认为逃避等于和分号就足够了,但不确定.

这是一小段代码,所以我可以更清楚地说明这个问题:

 String ldapSearchQuery = "(cn=" + $userName + ")";
 System.out.println(ldapSearchQuery); 
Run Code Online (Sandbox Code Playgroud)

显然我需要清理$ userName,如本OWASP文章中所述

security sanitization ldap

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

是否需要消毒JSON?

我认为网络上的一个众所周知的最佳做法是不信任任何输入.这句话

"所有的投入都是邪恶的."

可能是输入验证方面引用最多的引用.现在,对于HTML,您可以使用DOMPurify等工具对其进行清理.

我的问题是,如果我有运行Express和身体解析器中间件的Node.js服务器来接收和解析JSON,我是否还需要运行任何清理?

我(也许天真?)的想法是JSON只是数据,没有代码,如果有人发送无效的JSON,身体解析器(JSON.parse()内部使用)无论如何都会失败,所以我知道我的应用程序将收到一个有效的JavaScript对象.只要我没有运行eval或调用函数,我应该没事,不应该吗?

我错过了什么吗?

javascript json sanitization node.js dompurify

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

FILTER_FLAG_STRIP_LOW vs FILTER_FLAG_STRIP_HIGH?

你知道我在谈论filter_varPHP 5中的功能.

我访问过http://php.net/manual/en/filter.filters.sanitize.php,但我仍有疑问:

有什么确切的区别?

请提供一个示例,以便更容易澄清.

php validation sanitization filter

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

PHP清理用户数据以在header()函数中使用

是否有任何需要对用户数据进行的转义例程才能在PHP的header()函数中使用它?
例如,对于MySQL,我在将数据发送到数据库之前对用户数据运行mysql_real_escape_string(),并在HTML中输出我运行htmlspecialchars()...两者都包含在我自己的自定义函数中,首先进行其他处理.

但是对于PHP的header()函数,需要做什么?我有什么危险的角色可以逃脱吗?

我正在尝试做这样的事情......将查询字符串附加到标题()重定向到不同的页面

if ( strlen($_SERVER['QUERY_STRING']) > 0) {
$query_string = '?'.$_SERVER['QUERY_STRING'];
}
header('Location: http://domain.com/activate.php'.$query_string);
exit();
Run Code Online (Sandbox Code Playgroud)

任何人都获得了有关header()函数需要转义的内容的任何信息?冒号和分号字符似乎对header()语句非常关键.我应该逃避吗?

php sanitization header http-headers

17
推荐指数
1
解决办法
4557
查看次数

如何清理节点js中的输入值?

我验证了我的Node.js输入,以便它们不会为空,但我也要清理它们.请帮助我如何做到这一点.

req.checkBody('name', 'Name is required!').notEmpty();
req.checkBody('surname', 'Surname is required!').notEmpty();
req.checkBody('username', 'Username is required!').notEmpty();
req.checkBody('password', 'Password is required!').notEmpty();
req.checkBody('password2', 'Passwords do not match!').equals(req.body.password);

var errors = req.validationErrors();

if (errors) {
    res.render('user/register', {
        errors: errors,
        user: null,
        title: 'Register'
    });
}
else {
    var userData = {
        name : req.body.name,
        surname : req.body.surname,
        username : req.body.username,
        password : req.body.password,
        avatar : 'No_person.jpg'
    };
    userController.addUser(req,res,userData);
}
Run Code Online (Sandbox Code Playgroud)

javascript sanitization node.js

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