在 PHP 中保护 SQL 查询的最佳方法

2024-02-04

如果我使用 PHP 在 MySQL 数据库上运行查询,如下所示:

$query="SELECT * FROM tablename";

防止 SQL 注入等问题的最佳方法是什么?我听说过一些转义方法,但是它不会在查询中留下斜杠吗?


您在问题中显示的查询不使用用户提供的值,因此不存在 SQL 注入的情况,但在一般情况下:-

首先,您必须验证all在查询中使用用户输入(用户名、电子邮件等)之前。例如:- 如果您只允许用户名中包含字母数字字符,那么您必须在继续形成数据库查询之前检查输入是否实际上是字母数字字符,并且还必须检查所有输入的大小。

之后,我认为Prepared statements是防止SQL注入的最佳选择。

mysql_real_escape_string() 的问题:-

由于mysql_real_escape_string()根据默认字符集转义字符,因此它比addslashes()函数更好,并且它可以正确清理滥用多字节字符集引起的 SQL 注入 http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string,但在另一篇文章中here http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html,显示了一个解决方案场景,解释了注入仍然可以完成。

解决方案:-

因此,防止 SQL 注入的正确且更好的方法是使用准备好的语句。这是一种在插入用户输入(参数)之前对 SQL 语句进行预编译的技术,并将其视为可重用的 SQL 模板。因此,它将用户输入与实际的 SQL 代码分开,并且 SQL 解析器从不解析用户输入。

除了安全性之外,它还优化了 SQL 查询的速度。当您需要使用不同的用户输入多次运行相同的查询时,它会有所帮助。

实现细节可以参考PHP手册。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中保护 SQL 查询的最佳方法 的相关文章

随机推荐