我对PHP&SQL安全性和我正在考虑一个验证/过滤用户输入的解决方案。
据我所知,你主要需要担心两件事:
(1(有人将SQL查询注入与数据库交互的输入字段
(2(
在研究过程中,我发现了以下解决方案:
对于(1(:准备好的语句
对于
我知道你必须验证/过滤任何用户输入,据我所知,大多数安全漏洞的存在都是因为这样做的错误。例如,简单地过滤掉以下输入中的<script>
标签:
email@<sc<script>ript>example.com
那么,一个真正简单的算法拒绝任何包含"<quot;或">quot;(假设用户没有理由使用这些符号(,并将用户输入中的[b]
之类的内容替换为<b>
以允许特定标签?这不是一种防止恶意HTML内容的防弹方法吗?或者我错过了什么?
此外,我想知道一直使用准备好的语句是否会使SQL注入变得不可能,或者是否仍然可以在专门使用准备好语句的页面上进行SQL注入?
你可以做到,是的。但你可能会面临另一次攻击。你可以解决这个问题,但你可能仍然。。。
正因为如此,白名单就更容易了。只允许某些字符(尽管允许使用更广泛的字符集(,您可以简单地只允许这些字符。
基本逻辑是电子邮件只包含a-z
0-9
-
_
.
和<script>
0。如果使用了该集合之外的任何字符,那就是错误的。
从那里,你可以指定它更多。电子邮件是一组字符(减号@(,而不是@
,然后是那个字符集(减号@.(
从那里,您可以添加域检查,例如.{2,}$
(必须以句点结尾,并且至少以字母结尾(
从那里。。。
这只是节省的部分。在显示器上,您需要各种技巧来确保它不是XSS。
或者你可以直接使用
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Not an emailaddress, please try again before submitting!";
}