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安全。