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: 4,003 · Posted: 2020-04-16
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb/LiteNote扫描下方二维码关注公众号和小程序↓↓↓
Loading...