如何防止 Sql 注入

什么是 SQL 注入 (SQLi)?

每个人都知道,随着技术的进步,安全是每个商业和社交媒体平台的基本且重要的特征。几乎每个企业都依赖于他们的业务数据,这些数据存储在数据库中。因此,SQL 提供了一些技术来从黑客手中保存您的数据。我们可以使用不同的技术防止我们的网站数据被黑客窃取。同样,SQL 注入是一种黑客技术。黑客可以访问您的数据,也可以通过在您的数据库中注入一些代码来使您的服务器崩溃。由于倾斜的网络包装编码不当,这种方法变得可行。一些新开发人员不检查数据字段的空性,空字段是SQL注入的原因。

通过参数化查询防止 SQL 注入

这种方法包括每次我们需要插入消费者提供的费用时,在我们的查询中使用带有问号占位符 (?) 的准备好的语句。这是非常有效的,除非 JDBC 驱动的实现中存在蠕虫,否则不会受到攻击。

这种技术的一个简单示例代码是:

公共列表 safeFindAccountsByCustomerId(String customerId)

抛出异常 {

字符串 sql = ‘ select ‘ + ‘ customer_id, acc_number, branch_id, balance from Accounts ‘ + ‘ where customer_id = ? ' ;

连接 c = dataSource.getConnection();

PreparedStatement p = c.prepareStatement( sql ) ;

p.setString(1,customerId);

结果集 rs = p.executeQuery( sql ) ) ;

// 省略 - 处理行并返回一个帐户列表

}

在上面的代码中,可用 Connection 示例中的 prepareStatement() 方法来获取 PreparedStatement。这允许我们在执行之前在问题中正确插入人提供的值。

PDO 准备查询的使用

使用 PDO 和准备好的查询。

($conn 是一个 PDO 对象)

$stmt = $conn -> 准备('INSERT INTO tbl VALUES (:Id, :name)');

$stmt -> bindValue (‘:id’, $id);

$stmt -> bindValue(' :name' , $name ) ;

$stmt -> 执行();

准备好的语句对 SQL 注入具有弹性,因为事实参数值(稍后使用独一无二的协议传输)现在不需要成功转义。如果原始声明模板不是从外部输入导出的,则不会出现 SQL 注入。

通过 Ruby 框架中的对象关系映射 (ORM) 进行预防

许多开发团队选择使用对象关系映射 (ORM) 框架来使 SQL 结果单元到代码对象的转换更加无缝。 ORM 工具经常建议开发人员很少应该为他们的代码编写 SQL 语句——这些工具很乐意在后台使用参数化语句。

def current_user(电子邮件)

# ‘User’ 对象是一个 Active Record 对象,它必须找到方法

# 由 Rails 自动生成。

User.find_by_email(电子邮件)

结尾

上面的代码将使您免受 SQL 注入或黑客攻击。

加密数据库

另一种防止 SQL 数据库注入的简单方法是加密数据库或数据。因此,通常将您的数据库凭据保存在单独的报告中并对其进行安全加密,以确保攻击者无法从中获益。