如何防止javascript注入攻击

JavaScript023

如何防止javascript注入攻击,第1张

很多网站都有私信或者留言板功能。登录用户可以发表评论或者给其他用户(包括管理员)发送私信。一个最简单的模拟表单如下:

<form action="sendmessage.php" method="post'">

<textarea name="message"></textarea>

<input type="submit" value="send" />

</form>

当用户点击发送时,这条消息会被保存在数据库中指定的数据表中,另一个用户当打开这条消息的时候将看到发送的内容。但是,如果一个恶意攻击者发送的内容包含了一些javascript代码,这些代码用于偷取敏感的cookie信息。当用户打开看到这条消息的时候,恶意的javascript代码就会得到执行,造成敏感cookie信息泄漏。攻击者可以利用获得这些cookie信息进行session hijacking会话劫持,直接以合法用户的身份登录其他用户的账户。

恶意攻击者可以在消息框中加入一下javascript代码:

防止sql注入攻击,在数据库方面,针对每一个表的增删改,写存储过程,程序主要靠存储过程操作数据。 在代码中,个别特殊需要数据查询的,如果不能通过存储过程,那就尽量用传参的方式,尽量不要拼接sql。 如果非要拼接,要对拼接字符串进行处理,Tools的如下字符串处理方法可以防止注入攻击: ///  /// 格式化文本(防止SQL注入) ///  ///  ///  public static string AntiSQL(string html) {     Regex regex一 = new Regex(@"<script[\s\S]+", RegexOptions.IgnoreCase)    Regex regex二 = new Regex(@" href *= *[\s\S]*script *:", RegexOptions.IgnoreCase)    Regex regex三 = new Regex(@" on[\s\S]*=", RegexOptions.IgnoreCase)    Regex regex四 = new Regex(@"<iframe[\s\S]+", RegexOptions.IgnoreCase)    Regex regex5 = new Regex(@"<frameset[\s\S]+", RegexOptions.IgnoreCase)    Regex regex一0 = new Regex(@"select", RegexOptions.IgnoreCase)    Regex regex一一 = new Regex(@"update", RegexOptions.IgnoreCase)    Regex regex一二 = new Regex(@"delete", RegexOptions.IgnoreCase)    html = regex一.Replace(html, "") //过滤标记     html = regex二.Replace(html, "") //过滤href=javascript: () 属性     html = regex三.Replace(html, " _disibledevent=") //过滤其它控件的on...事件     html = regex四.Replace(html, "") //过滤iframe     html = regex一0.Replace(html, "s_elect")    html = regex一一.Replace(html, "u_pudate")    html = regex一二.Replace(html, "d_elete")    html = html.Replace("'", "’")    html = html.Replace(" ", " ")    return html