SQL 注入和 XSS 攻击

SQL JavaScript About 796 words

相同点

两者都是通过在输入框内输入特殊的字符串导致。

SQL注入

输入的--注释符号,'or 1=1--等,导致部分where条件没有起到效果。

例子

程序中使用了拼接字符串的方法。而前端传入的用户名是123'--,那么用户为123的登陆将不再校验密码。(当然一般做法是限定用户,找到记录后在程序中比较加密后的密码)

String sql = "select * from user where username = '" + inputUsername + "' and password = '" + inputPassword + "'";

解决办法

  • Java - MyBatis使用${},而不是#{}
  • Java - JdbcTemplate使用PreparedStatement,而不是Statement
  • Lua - OpenRestyPostgreSQL使用ndk.set_var.set_quote_pgsql_strMySQL使用ndk.set_var.set_quote_sql_strngx.quote_sql_str()

XSS攻击

Cross Site Script,跨站脚本攻击。用户通过在输入框中输入一些JS脚本内容提交给服务器,而服务器在保存至数据库时没有进行过滤或转义,导致渲染网页时JS脚本得到正常加载。(若保存数据库时未做过滤或转义,也可在渲染时约定转义)

例子

在输入框中提交一个alert弹窗提示。后端程序为过滤或转义,再下一次用到该内容时网页就会弹出一个提示框。

<script>alert('Test!');</script>

解决办法

  • 前置处理:过滤或转义特殊字符。如:<>/等;
  • 后置处理:保存至数据库还是按提交时内容保存,数据库取出数据渲染时,统一对用户输入的字段进行过滤或转义;
Views: 3,186 · Posted: 2020-04-16

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh