提问人:mvnds1605 提问时间:11/23/2020 最后编辑:mvnds1605 更新时间:11/24/2020 访问量:203
在 PHP 中验证用户输入的简单方法
A simple approach of validating user input in PHP
问:
我对PHP和SQL安全很陌生,我正在考虑一种验证/过滤用户输入的解决方案。
据我了解,您主要需要担心两件事:(1)有人将SQL查询注入到与数据库
交互的输入字段中(2)有人将标签之类的东西放入他们的输入中,
然后再次打印到页面上<script>
在研究过程中,我发现了以下解决方案:
对于(1):准备好的语句
对于(2):验证/过滤HTML标签
我知道您必须验证/过滤任何用户输入,据我了解,大多数安全漏洞都是由于这样做的错误而存在的。
例如,只需在以下输入中过滤掉标记:<script>
email@<sc<script>ript>example.com
那么,一个非常简单的算法拒绝任何包含“<”或“>”的用户输入(假设用户没有理由使用这些符号),并将用户输入内部的内容替换为允许特定标签呢?这不是防止恶意 HTML 内容的防弹方法吗,或者我错过了什么?[b]
<b>
另外,我想知道是否一直使用预处理语句会使SQL注入变得不可能,或者仍然可以在专门使用预处理语句的页面上进行SQL注入?
答:
你可以这样做,是的。但这样一来,你可能会受到另一次攻击。你可以解决这个问题,但你仍然可能......
正因为如此,将白名单列入白名单更容易。只允许某些字符(尽管允许使用更广泛的字符集),您可以简单地只允许这些字符。
基本逻辑是电子邮件仅包含 和 。如果使用了该集合之外的任何字符,则是错误的。a-z
0-9
-
_
.
@
从那里,您可以指定更多。电子邮件是一组字符(减去 @),然后是 ,然后是字符集(减去 @)。
从那里,您可以添加域检查,例如(必须以点结尾,至少以字母结尾)。
从那里...@
\.{2,}$
而这只是节省的部分。在展示时,您需要各种技巧来确保它不是 XSS。
或者你可以只使用
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Not an emailaddress, please try again before submitting!";
}
评论
+
评论
htmlentities()
htmlspecialchars()
<
>