SQL 注入和 XSS 攻击
SQL JavaScript 大约 796 字相同点
两者都是通过在输入框内输入特殊的字符串导致。
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
-OpenResty
中PostgreSQL
使用ndk.set_var.set_quote_pgsql_str
,MySQL
使用ndk.set_var.set_quote_sql_str
或ngx.quote_sql_str()
;
XSS攻击
Cross Site Script
,跨站脚本攻击。用户通过在输入框中输入一些JS
脚本内容提交给服务器,而服务器在保存至数据库时没有进行过滤或转义,导致渲染网页时JS
脚本得到正常加载。(若保存数据库时未做过滤或转义,也可在渲染时约定转义)
例子
在输入框中提交一个alert
弹窗提示。后端程序为过滤或转义,再下一次用到该内容时网页就会弹出一个提示框。
<script>alert('Test!');</script>
解决办法
- 前置处理:过滤或转义特殊字符。如:
<
、>
、/
等; - 后置处理:保存至数据库还是按提交时内容保存,数据库取出数据渲染时,统一对用户输入的字段进行过滤或转义;
阅读 2760 · 发布于 2020-04-16
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Maven 使用 -U 参数强制获取最新版本的依赖库阅读 995
-
Lombok MapStruct cannot find symbol阅读 1585
-
Spring AOP 原理阅读 1499
-
Notepad++ 保存 Ctrl-S 显示 DC3 ,搜索 Ctrl-F 显示 ACK 解决办法阅读 7502
-
MySQL 开启日志阅读 1094
-
使用 ffmpeg 转换 m4a 为 mp3阅读 8108
-
Docker 部署 Kibana阅读 1347
-
Spring Boot 不返回为 null 的 JSON 字段阅读 4693
-
MySQL 全文检索设置停止词阅读 2509
-
JavaScript document 对象阅读 874