MSSQL 注入实践:助力防护Web 安全(mssql 注入实战)

MSSQL注入(Structured Query Language injection,简称SQLi)是一种将未授权的SQL指令或语句插入到Web表单输入域或URL请求中,由Web服务器执行的一种恶意攻击方式。其中,MSSQL注入是由于网站应用程序没有正确分离用户输入和数据库查询,使得攻击者可以通过MSSQL语句获取数据库内容。基于安全性考虑,必须正确保护Web服务器,确保网站的安全可靠,才能有效的抵御MSSQL注入攻击。

MSSQL注入攻击一般包括两个部分:获取Web应用程序及数据库之间的交互信息,以及利用MSSQL漏洞获取数据库信息。首先,攻击者使用sqlmap等工具,获取Web表单输入域或URL请求中的MSSQL指令或语句,来构建MSSQL注入测试语句,其次,攻击者使用MSSQL的常见命令,空密码等方法,来绕过身份验证,进一步获取数据库信息。

MSSQL注入防御不可或缺,目前的防御措施主要 包 括两个方面:第一,使用安全的MSSQL函数,及带参数的SQL语句和拆分存储过程,以正确分离用户输入和数据库查询操作;第二, 启用数据库及Web层面的安全产品,如网站防火墙,以及安全性加强编程,如编写SQL语句及测试易受攻击的代码,确保程序正确表示和内容校验规则,有效防范MSSQL注入攻击。

下面以一个简单的MSSQL注入实例进行说明,此实例是将常见的MSSQL注入实践示例用PHP 代码实现,主要目的是说明如何正确安全的连接MSSQL服务器及执行SQL语句。

“`php

$serverName = “ServerName”;

$uid = “UserName”;

$pwd = “Password”;

$databaseName = “DataBaseName”;

$connectionInfo = array( “UID”=>$uid,

“PWD”=>$pwd,

“Database”=>$databaseName);

$conn = sqlsrv_connect( $serverName, $connectionInfo);

if($conn) {

//对数据库查询操作

$sql = “SELECT * FROM table WHERE user='”.$_GET[“user”].”‘AND pass='”.$_GET[“pass”].”‘”;

$stmt = sqlsrv_query($conn, $sql);

if( $stmt === false) {

die( print_r( sqlsrv_errors(), true) );

}

//对数据库修改操作

$sql = “update table set user='”.$_GET[“user”].”‘, pass='”.$_GET[“pass”].”‘”;

$stmt = sqlsrv_query($conn, $sql);

if( $stmt === false ) {

die( print_r( sqlsrv_errors(), true) );

}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {

echo “Result:” . $row[‘Result’]. “\n”;

}

sqlsrv_free_stmt( $stmt);

sqlsrv_close( $conn);

}

?>

通过上面的示例,可以看出把正确的代码实现前端与后端验证以及数据库接口部分,可以有效的防止MSSQL 注入攻击,从而助力防护Web安全。
综上所述,MSSQL注入防御必不可少,如何做好防御工作关键在于对Web程序的设计及代码的安全审核;正确的安全性加强编程,以及启用安全的相关安全产品,这样才能有效的抵御MSSQL 注入等攻击,保护Web安全。

数据运维技术 » MSSQL 注入实践:助力防护Web 安全(mssql 注入实战)