我正在寻找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类对其他库/框架的外部依赖性尽可能小 - 对我来说是最好的.
那个怎么样?
我正在从一堆文本文件中生成一些sql insert语句.
这些文本文件通常是用户输入数据.我想清理这些数据,以便它不会破坏插入语句.
例如,一些输入数据,人们使用了"不要"这个词.不会导致sql语句认为字符串已经结束并因此导致错误.
有没有我可以调用的.NET方法将所有这些字符转换为转义码或安全字符?
在表单上接收用户输入时,我想检测"用户名"或"地址"等字段是否包含在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, …
我的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?
我想清理URL中的字符串,这是我基本上需要的.
例如.
This, is the URL!
Run Code Online (Sandbox Code Playgroud)
必须回来
this-is-the-url
Run Code Online (Sandbox Code Playgroud) 我正在研究第一个查询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文章中所述
我认为网络上的一个众所周知的最佳做法是不信任任何输入.这句话
"所有的投入都是邪恶的."
可能是输入验证方面引用最多的引用.现在,对于HTML,您可以使用DOMPurify等工具对其进行清理.
我的问题是,如果我有运行Express和身体解析器中间件的Node.js服务器来接收和解析JSON,我是否还需要运行任何清理?
我(也许天真?)的想法是JSON只是数据,没有代码,如果有人发送无效的JSON,身体解析器(JSON.parse()内部使用)无论如何都会失败,所以我知道我的应用程序将收到一个有效的JavaScript对象.只要我没有运行eval或调用函数,我应该没事,不应该吗?
我错过了什么吗?
你知道我在谈论filter_varPHP 5中的功能.
我访问过http://php.net/manual/en/filter.filters.sanitize.php,但我仍有疑问:
有什么确切的区别?
请提供一个示例,以便更容易澄清.
是否有任何需要对用户数据进行的转义例程才能在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()语句非常关键.我应该逃避吗?
我验证了我的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) sanitization ×10
php ×4
html ×2
javascript ×2
node.js ×2
xss ×2
.net ×1
dompurify ×1
filter ×1
header ×1
http-headers ×1
input ×1
java ×1
json ×1
ldap ×1
perl ×1
preg-replace ×1
regex ×1
security ×1
sql ×1
utf-8 ×1
validation ×1