所以,我有这段代码:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "This field is required";
} else {
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters allowed";
}
它工作正常,但有一个问题,如果用户写'(撇号)怎么办? 我自己尝试了,它以某种方式破坏了代码,因为它永远不会到达数据库,我无法将撇号添加到preg_match,因为这会破坏代码本身并且无法正常运行!
所以我的问题是,如何阻止用户写''(撇号)?
感谢阅读。
答案 0 :(得分:3)
您是否应该停止用户编写撇号,还是为此类情况准备代码?今天是撇号,明天是双引号,你不能管理每一个符号(想想其他字母)。
如果要直接将其添加到数据库,请使用Mysqli
或PDO
(或您使用的任何数据库管理系统)转义方法转义符号。否则,您的代码可能存在真正的危险,尤其是因为SQLInjection。在xkcd的漫画中,这里展示了可能发生的一个相当好的例子,但想象一下这个输入:
test'); drop table important_data;--
是的,你是(至少在这种情况下并在用你的正则表达式验证之后)覆盖了这个问题,但这可能发生在你的代码周围的每一个地方(假设一个评论表,你可以写任何东西)。 始终逃避每个用户输入。它将保护您免受许多未来问题的影响。