2 php forms security validation
我是一个PHP新手,正在研究基本的表单验证脚本.我知道输入过滤和输出转义对于安全性原因都至关重要.我的问题是我下面编写的代码是否足够安全?首先澄清一些说明.
这是(略微清理)代码:
$clean = array();
$html = array();
$_POST['fname'] = filter_var($_POST['fname'], FILTER_SANITIZE_STRING);
$clean['fname'] = $_POST['fname'];
$html['fname'] = htmlentities($clean['fname'], ENT_QUOTES, 'UTF-8');
if ($_POST['fname'] == "") {
$formerrors .= 'Please enter a valid first name.<br/><br/>';
}
else {
$formerrors .= 'Name is valid!<br/><br/>';
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
〜贾里德
我知道输入过滤和输出转义对于安全性原因都至关重要.
我想说输出转义对于安全性和正确性原因至关重要,输入过滤是深度防御和强制执行特定应用程序规则的潜在有用措施.
输入过滤步骤和输出转义步骤必然是单独的问题,并且不能组合成一个步骤,尤其是因为存在许多不同类型的输出转义,并且必须为每个输出上下文选择正确的输出(例如HTML-在页面中转义,URL转义以进行链接,SQL转义等等.
不幸的是,PHP在这些问题上传统上非常模糊,因此提供了许多可能误导您的混合消息功能.
在下面的示例字段中,该字段是纯文本,因此我需要做的就是清理它.
是.唉,FILTER_SANITIZE_STRING绝不是一个理智的杀菌者.它完全删除了一些内容(strip_tags这本身就非常不合理),同时HTML转义其他内容.例如,报价变成了".这是胡说八道.
相反,对于输入消毒,请查看:
检查它是你正在使用的编码的有效字符串(希望是UTF-8;参见例如此正则表达式);
删除控制字符,U + 0000-U + 001F和U + 007F-U + 009F.仅允许新行通过有意识的多行文本字段;
删除不适合用于标记的字符;
对于内容模型比任意文本字符串更具体的数据,验证输入在逐个字段的基础上符合应用程序要求.虽然你的转义应该能够<正确处理一个角色,但是在没有任何意义的领域中尽早摆脱它可能是一个好主意.
对于输出转义一步我一般喜欢htmlspecialchars()到htmlentities(),虽然你正确使用的UTF-8参数停止后者的功能在与平常不同的方式打破.
| 归档时间: |
|
| 查看次数: |
6208 次 |
| 最近记录: |