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