据我所知,javascript验证仅用于客户端的目的,并将漏洞排除在服务器端之外,我需要验证php中输入的安全性。
我已经验证了用户可以从客户端(使用javascript)在表单中输入哪些类型的输入,如下例所示:
if(/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i.test(document.getElementById(idName).value)){
return true;
}else{
return false;
}
我已经测试过在php中的表单输入上完成了以下测试:
$fname = $lname = $saddress = $city = $state = $zip = $email = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$fname = test_input($_POST["fname"]);
$lname = test_input($_POST["lname"]);
$saddress = test_input($_POST["saddress"]);
$city = test_input($_POST["city"]);
$state = test_input($_POST["state"]);
$zip = test_input($_POST["zip"]);
$email = test_input($_POST["email"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
我是否还需要使用正则表达式重新验证用户能够以何种格式在PHP中输入哪些类型的输入?或者在客户端使用正则表达式验证时,在服务器端使用htmlentities就足够了吗?
非常感谢任何信息!
谢谢,Al
答案 0 :(得分:5)
始终验证服务器端的所有内容。由于每个人都可以使用Findbugs或Chrome工具等工具通过浏览器更改您的javascript客户端代码,因此仅使用Javascript进行验证并不安全。
您在客户端验证的只是为用户提供更好的体验。
答案 1 :(得分:1)
您需要考虑的是退回 - 如果用户关闭JavaScript会怎么样?我有过这样的场合,我提供了一个整齐的Jquery来解决一个问题 - 只是因为它不适用于间歇性客户端。
您应该始终清理服务器端输入的表单输入。 否则,你可能很容易让自己处于漏洞状态。
PHP的过滤功能可以帮助您过滤/清理输入: http://php.net/manual/en/book.filter.php
至于正则表达式 - 考虑您是否需要在服务器端,它有一个您可能不需要的高开销 - 只要您正在清理输入并处理所有可能的错误。
答案 2 :(得分:1)
无论您在客户端使用何种验证,都应该始终验证服务器端的输入。用户可以在技术上向服务器发送任何内容并执行一些SQL注入或以其他方式发送错误或不允许的数据。
仅使用javascript帮助用户填写正确的内容(例如,如果他们输入了无效的电子邮件地址,立即通知他们)。
答案 3 :(得分:1)
是的,您必须完成服务器端验证。你不能相信JavaScript验证。因为javascript是在浏览器中运行的。因此用户可以控制它。也可以在浏览器上禁用javascript。在这种情况下,它将跳过验证。一个简单的例子我见过许多人使用这样的东西
<form name='frm' onSubmit='return validate();'>
使用检查工具可以将其更改为
<form name='frm'>
然后它会跳过客户端验证。
(客户端+服务器)验证需要更多时间。但是当你考虑安全性时,它并不重要。
答案 4 :(得分:0)
正如其他答案中所提到的,用户可以轻松绕过JS验证并直接发布到服务器,为此,只在服务器端验证表单,它会为您节省一些代码,但与此同时#&# 39;我需要节省更多的服务器资源。
答案 5 :(得分:-1)
是的,您还使用服务器端验证来验证输入。 请告诉我你想在服务器上验证哪个字段。