作为现有答案的补充:要记住的一件非常重要的事情是防止跨站点脚本攻击。您必须假设“所有输入都是邪恶的!” . 用户不仅可以输入他们的名字或类似的东西,还可以输入 JavaScript(XSS 甚至持久性 XSS,如果您保存输入)或部分 SQL 查询来执行 SQL 注入。
假设您的脚本接受txtname
从 GET 或 POST 调用的变量(这就是$_REQUEST
意思)。你有这个代码:
<?php echo "Welcome!" .$_REQUEST['txtname']; ?>
可以建立这样的链接:
http://yourhost/yourscript.php?txtname=<script%20type="text/javascript">alert("This%20might%20also%20be%20an%20evil%20script!");</script>
然后使用 URL 缩短服务来构建一个看起来无害的链接,重定向到上述攻击者的 URL,例如
http://short.xy/dfudf7
这会将用户重定向到上面的恶意 JavaScript 链接。然后您的网站将执行任何 JavaScript 或嵌入邪恶iframes
或攻击者想要的任何内容。您的用户/客户只会在地址栏中看到您的网站,并且会认为所有来自您的内容,尽管黑客在他们查看的网站中添加了恶意部分。
因此,无论何时您输出直接或间接来自用户输入的内容(无论是从数据库读取$_REQUEST
还是从数据库中获取),您都必须确保 HTML 特殊字符(如 < 和 >)不再起作用!php 提供函数htmlspecialchars来转义这些危险字符。然后它们会像文本一样显示,而不像 HTML/JavaScript 那样起作用。
顺便说一句,这不是针对 SQL 注入的保护措施。如果您打算稍后使用数据库,则还必须寻找它。同样在这个领域,有一些功能可以在将用户输入传递到数据库之前“确定”用户输入。