【发布时间】:2016-10-25 12:47:32
【问题描述】:
我到处都在寻找,有大量用于 http:// 或 www... URL 的正则表达式,但对于服务器内部使用的链接却没有。
在我的情况下,我需要清理/验证如下路径:
/folder1/folder2/.../file.ext
例如:
/img/<"?">/
/img/content/.../file.ext<script>alert("Script")</script>
无效。这意味着有效是以“/”开头的路径,后跟文件夹有效名称和“/”的组合,以文件名和扩展名结尾。
PHP 的内置 FILTER_VALIDATE_URL 或 FILTER_SANITIZE_URL 不接受这样的路径作为有效 URL。所以我想我必须使用正则表达式。
filter_var($url, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/ ... /"))))
请一些正则表达式向导帮助我解决这个问题。谢谢。
【问题讨论】:
-
在我尝试“解决您的问题”之前:尝试使用正则表达式来防止 XSS 攻击不是一个好主意……您应该简单地清理输出。
-
@TomLord 无论如何都应该验证输入,因为链中的链接之一称为安全性。输出转义(确实可以防止 XSS)是另一个链接。两者都应始终应用。
-
@ChristianF 在这种情况下,唯一合理的输入验证(以及您在下面建议的)是字符串表示有效的文件路径。我的观点是,使用正则表达式来查找像
<script>这样的所有内容几乎不可能完美,只会给您的代码增加巨大的复杂性而没有太大的好处。 -
@TomLord 啊,那我明白了。我还编辑了我的答案,以扩展这种差异、测试的局限性以及需要进一步的测试/保护。
标签: php regex url preg-match filter-input