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>
解决办法
- 前置处理:过滤或转义特殊字符。如:
<
、>
、/
等; - 后置处理:保存至数据库还是按提交时内容保存,数据库取出数据渲染时,统一对用户输入的字段进行过滤或转义;
阅读 1748 · 发布于 2020-04-16
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
k3s 设置镜像阅读 235
-
Linux 之修改设备名称阅读 1580
-
MySQL 分页阅读 904
-
Java 并发的基石 LockSupport阅读 774
-
Oracle 数据库连接异常 ORA-28001: the password has expired阅读 2410
-
走进 Rust:配置 IDEA 开发环境阅读 3348
-
Redis 执行 Lua 脚本抛出 StatusOutput does not support set(long) 异常阅读 3643
-
OpenResty 使用 lua-resty-upload 上传文件阅读 919
-
Kubernetes Pod 控制器 DaemonSet阅读 216
-
设计模式之解释器模式阅读 1551