php如何防止sql注入?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php如何防止sql注入?相关的知识,希望对你有一定的参考价值。

额,这是我老师给的答案

答:过滤一些常见的数据库操作关键字,
select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤
php配置文件中register_globals=off;设置为关闭状态.(作用将注册全局变量关闭);如接收POST表单的值使用$_POST['user'],假设设置为ON的话$user才接收值
sql语句书写的时候尽量不要省略小引号(tab上面那个)和单引号
提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,使之不易被猜中
对于常的方法加以封装,避免直接暴漏SQL语句
开启PHP安全模式safe_mode=on
打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"
控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志
使用mysqlI或PDO预处理
参考技术A 对于网页来讲,注入源头还是在于用户提交的数据问题,只要把这个数据控制好,注入是很难成功的。所以,对用户提交上来的数据需要严格过虑及处理。

如何防止 JSP 中的 SQL 注入?

【中文标题】如何防止 JSP 中的 SQL 注入?【英文标题】:how to prevent SQL Injection in JSP? 【发布时间】:2011-09-10 11:59:59 【问题描述】:

就在上周,我正在做一些 PHP 的事情。我做了一个小解决方案来防止 SQL 注入。 PHP 一直是我的人,它有 3 种解决方案可供使用(也许更多)。一种是使用stripslashes() 函数启用“魔术查询”。另一种(推荐)是使用mysql_real_escape_string()函数。 这么简单,我的问题就解决了。然而,当涉及到 JSP 时,事情似乎并不那么简单。我搜索并没有找到任何内置函数来去除斜线或做那些事情(我相信这样的功能可以使用基本的 JAVA 函数来实现,但是......)。

请帮助我保护我的数据库。我听说过PreparedStatement,但真的无法理解吗? (我感受到了新手的真正含义)。

【问题讨论】:

您使用的是哪个数据库系统? MySQL? 【参考方案1】:

只需使用PreparedStatement 而不是Statement

即使用

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES (?, ?, ?)";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, col1);
preparedStatement.setString(2, col2);
preparedStatement.setString(3, col3);
preparedStatement.executeUpdate();

而不是

String sql = "INSERT INTO tbl (col1, col2, col3) VALUES ('" + col1 + "', '" + col2 + "', '" + col3 + "')";
statement = connection.createStatement();
statement.executeUpdate(sql);

PreparedStatement 还为其他类型提供了方便的 setter 方法,例如 setInt()setDate()setBinaryStream() 等。

请注意,此问题与 JSP 无关。它通常与Java有关。在 JSP 类中编写原始 Java 代码也被视为poor practice。最佳实践是创建一个独立类,该类在特定表上执行所有 DB 交互任务,也称为 DAO(数据访问对象)类。然后,您可以在 servlet 类中导入/使用此 DAO 类。

另见:

Java Tutorials - JDBC Tutorial - PreparedStatement Difference between Statement and PreparedStatement how to send a ResultSet object in jsp back to html (javascript)?

【讨论】:

哇,这是一个传播大量信息的评论,你的评论对我很有帮助,你让事情变得简单,谢谢你,因为你,它已经解决了! 不客气。顺便说一句,这是一个答案,而不是评论。您在问题/答案下面看到的那些小东西是 cmets :) +1 表示“JSP 中的 Java 代码是一种不好的做法”评论。当您开始使用 JSP 时,这似乎是个好主意,但是当您稍后返回以删除所有与视图无关的逻辑时,会很痛苦。

以上是关于php如何防止sql注入?的主要内容,如果未能解决你的问题,请参考以下文章

php如何防止sql注入

PHP怎么防止sql注入

php如何防止sql注入

如何防止代码注入攻击在PHP

什么叫sql注入,如何防止sql注入

什么是sql注入如何防止sql注入