官术网_书友最值得收藏!

Security

One reason to use parameterized queries is for security. Using a properly formatted parameterized query can protect against SQL injection attacks. A SQL injection attack is where a malicious user can execute database code (in this case, T-SQL) on a server by appending it to a data-entry field in the application. As an example, imagine we have an application that contains a form that asks the user to enter their name into a text box. If the application were to use an ad hoc statement to insert this data into the database, it would generally concatenate a T-SQL string with the user input, as in the following code:

DECLARE @sql nvarchar(MAX);
SET @sql = N'INSERT Users (Name) VALUES (''' + <user input> + ''');';
EXECUTE (@sql);

A malicious user might enter the Bob'); DROP TABLE Users; -- value into the text box.

If this is the case, the actual code that gets sent to SQL Server would look like the following:

INSERT Users (Name) VALUES ('Bob'); DROP TABLE Users; --');

This is valid T-SQL syntax that would successfully execute. It would first insert a row into the Users table with the Name column set to 'Bob', then it would drop the Users table. This would of course break the application, and unless there was some sort of auditing in place, we would never know what happened.

Let's look at this example again using a parameterized query. The code might look like the following:

EXECUTE sp_executesql @stmt = N'INSERT Users (Name) VALUES (@name)', @params = N'@name nvarchar(100)', @name = <user input>

This time, if the user were to send the same input, rather than executing the query that the user embedded in the string, the SQL Server will insert a row into the Users table, with the Name column set to ('Bob'); DROP TABLE Users; --'. This would obviously look a bit strange, but it wouldn't break the application or breach security.

主站蜘蛛池模板: 宁国市| 吉木萨尔县| 萨迦县| 白朗县| 龙泉市| 绥德县| 临安市| 开远市| 灌云县| 中江县| 观塘区| 海淀区| 尤溪县| 新化县| 巴楚县| 青河县| 涿鹿县| 读书| 宝清县| 大丰市| 大丰市| 托克托县| 瓦房店市| 津市市| 鹤壁市| 多伦县| 花莲县| 牟定县| SHOW| 梧州市| 铜鼓县| 芮城县| 罗江县| 金山区| 泾阳县| 南康市| 澎湖县| 泗水县| 香格里拉县| 蚌埠市| 即墨市|