Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用HTML进行表单输入验证是否足够安全?_Php_Html_Mysqli - Fatal编程技术网

Php 使用HTML进行表单输入验证是否足够安全?

Php 使用HTML进行表单输入验证是否足够安全?,php,html,mysqli,Php,Html,Mysqli,我想知道下面的HTML代码(处理时与htmlspecialchars一起)是否足以阻止SQL注入: <input name="email" type="email" required id="email" placeholder="Your Email Address" title="Valid email required" autocomplete="on" maxlength="50"> 只要我在将变量发送到数据库之前使用htmlspecialchars,这会防止对变量的

我想知道下面的HTML代码(处理时与htmlspecialchars一起)是否足以阻止SQL注入:

<input name="email" type="email" required id="email" placeholder="Your Email Address" title="Valid email required" autocomplete="on" maxlength="50">

只要我在将变量发送到数据库之前使用htmlspecialchars,这会防止对变量的危险操作吗?或者有没有一个黑客可以用来输入他们想要的任何格式的变通方法


我将使用准备好的语句和绑定参数。我担心的是,如果有人使用较旧的浏览器或设备,像“required”或type=“email”这样的HTML验证是否仍然有效。有人能绕过他们吗?在发送到数据库之前,我需要知道如何处理php代码中的错误。。。我想。。。抱歉,我对这一点有点陌生,所以我希望我讲得有道理。

您可以使用绑定参数将您的值添加到数据库中

你得看看。它将比使用变量执行查询更安全


您还可以使用来显示数据库中的结果。此函数比htmlspecialchars快一点。

在将mysqli\u real\u escape\u字符串发送到db之前使用它-将字符串中的特殊字符转义以用于SQL语句,同时考虑到连接的当前字符集请参见-由浏览器进行的客户端验证永远不够。它只是帮助用户不需要向服务器发送不完整或错误的数据,节省数据和往返时间。但是,您不能信任客户端执行服务器期望的操作。用户或浏览器可以做任何他们想做的事情。谢谢,是的,我将使用准备好的语句和绑定参数。我担心的是,如果有人使用较旧的浏览器或设备,像“required”或type=“email”这样的HTML验证是否仍然有效。有人能绕过他们吗?在发送到数据库之前,我需要知道如何处理php代码中的错误。。。我想。。。对不起,我对这有点陌生,所以我希望我说得有道理。是的。黑客可以轻松地通过html或javascript验证,你也可以这样做。例如,在chrome或firefox inspect element工具上打开网页并使用文本更改电子邮件属性。所以你的浏览器不会检查它是否是电子邮件。如果您在客户端进行任何类型的验证,那么您也应该在服务器端进行验证。例如,如果您的表单有任何带有email选项的输入元素,那么您应该在php端添加一个类似filter\u var($\u post[“email]、filter\u VALIDATE\u email)的函数)使用Fiddler或浏览器插件或netcat for Linux之类的程序创建自定义HTTP请求没有问题。浏览器验证只是为了用户体验,所以用户不会意外地发布任何错误。您还必须在服务器端验证数据。@merdincz-好的,这正是我要找的,谢谢!我很熟悉使用FILTER_VALIDATE_EMAIL。我只是想知道在接受提交之前HTML应该在表单中这样做时,我是否需要使用它。这非常有帮助!再次感谢!虽然FILTER_VALIDATE_EMAIL可能比大多数开发人员编写的代码更好,但它存在缺陷,因为它实际上拒绝了一些电子邮件地址,例如IDN(包含非ASCII Unicode字符的域名)或一些罕见但有效的语法,具体取决于您的PHP版本。请记住这一点。