首页 > 数据库 >sql注入?xss攻击?

sql注入?xss攻击?

时间:2024-05-30 15:29:12浏览次数:24  
标签:语句 xss name sql SQL 注入

昨晚斗鱼苞米没有直播,无聊的我只能打开csdn good good study daydayup了。看到一篇将安全的博文,今天试试自己小站的安全性如何(应该是一点都不安全。。)

此前开发就用过一个密码加密,对于sql注入和xss攻击,倒是没做过什么对应措施

危害:

sql注入:会窃取数据库的内容

xss攻击:可以窃取前端的cookie内容

(等等,学会了这个我是不是可以?哦?!踩缝纫机了?!!呜呜呜,后半生有着落了)

一.xss攻击:在页面中夹杂js代码来获取网络信息

比如在在输入框输入<script>alert(1)</script>会弹出框,相当于你的页面的js用户可以diy了

上面是参考文章里的up的使用例子。我这边在我的小站试试

诶?怎么没什么用?说明什么?说明我理解的不够到位。。

我这边查询了看看。发现span有个什么data-v-巴拉巴拉属性,由vue.js生成,解析html的时候会忽略script标签,

然后我原生重写了一个简单的

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>XSS 示例</title>
</head>
<body>

<!-- 假设这里是一个用户输入的地方 -->
<form>
  <label for="comment">输入您的评论:</label><br>
  <textarea id="comment" name="comment"></textarea><br>
  <button type="button" onclick="postComment()">提交评论</button>
</form>

<!-- 显示用户的评论 -->
<div id="comments"></div>

<script>
function postComment() {
  var comment = document.getElementById("comment").value;
  var commentElement = document.createElement("div");
  commentElement.innerHTML = "用户评论:" + comment;
  document.getElementById("comments").appendChild(commentElement);
}
</script>

</body>
</html>

但发现还是没有效果,发现是当前浏览器会自动过滤一些简单的XSS攻击情况。

在篇尾的文章中有提到用xss包修改配置来实现防止xss的攻击

二.sql注入

以前也没怎么接触过,我直接将我的代码丢进gtp让他帮我看看我的code有没有sql注入的风险。

exports.addArticleCates = (req, res) => {
    // 定义查询 分类名称 与 分类别名 是否被占用的 SQL 语句
const sql = `select * from ev_article_cate where name=? or alias=?`
// 执行查重操作
db.query(sql, [req.body.name, req.body.alias], (err, results) => {
这段代码存在 SQL 注入的潜在风险。虽然在查询数据库时使用了参数化查询,即在 SQL 语句中使用了占位符 ?,并将用户输入的值通过参数传递给 db.query 函数,但在执行新增文章分类的 SQL 语句时,却直接将 req.body 对象作为参数传递给了 db.query 函数,而没有进行充分的验证和转义。

由于 req.body 是用户提交的数据,恶意用户可以在其中插入 SQL 语句,导致 SQL 注入攻击。例如,如果恶意用户在 req.body 中添加了恶意的 SQL 语句片段,那么这些语句片段将被直接拼接到 SQL 查询语句中,从而执行恶意操作,比如删除数据库中的数据或者获取敏感信息。

要解决这个问题,应该对用户输入的数据进行严格的验证和转义,或者使用 ORM(对象关系映射)工具,如 Sequelize 或 TypeORM,来构建安全的 SQL 查询语句。这样可以避免直接拼接用户输入到 SQL 查询语句中的风险。

我理解了一下,就是比如我的sql语句为select * from ev_article_cate where name=? or alias=?

我的这个?正常是个name,但是输入有可能被人恶意改为

{ "cate_name": "name'; DROP TABLE article_categories;", "cate_alias": "science" }

那么sql语句就变成了select * from ev_article_cate where name='Science'; DROP TABLE article_categories;'OR alias='science'

那我又问了个问题,也就是我的表名正常情况是不可能有人知道的,所以应该是安全的吧

您提出了一个重要的观点。在典型的 SQL 注入攻击中,攻击者通常不会知道表的确切名称,因此他们无法直接执行诸如 DROP TABLE 这样的破坏性操作。

在真实的应用程序中,表名和数据库结构通常是保密的,攻击者无法轻易获取这些信息。因此,即使在注入了恶意代码的情况下,通常也很难直接针对数据库执行破坏性操作。

然而,攻击者可能会试图利用注入漏洞来窃取敏感数据、绕过身份验证或执行其他不良行为。因此,即使攻击者无法直接删除表,SQL 注入仍然可能会对应用程序的安全性造成严重影响。

综上所述,尽管攻击者可能无法直接执行 DROP TABLE 这样的操作,但仍然应该严格防范 SQL 注入攻击,以保护应用程序和数据的安全性。

但是这样看这样的sql方式与代码肯定是有问题的了。

然后问了ai一大堆,发现他的理解有错误,

    const sql = `SELECT * FROM article_categories WHERE name='${name}' OR alias='${alias}'`;

    db.query(sql, (err, results) => {

当代码为这种例子的时候才会出现上述说的问题,我的那部分代码是进行转义的,

它们被作为参数传递给了查询语句 checkSql 中的占位符 ?。这样,即使用户输入了恶意代码,例如 "Science'; DROP TABLE article_categories;",它也会被当作普通的字符串处理,而不会被解释为 SQL 代码的一部分。

参考文章:【Node.js实战】一文带你开发博客项目之安全(sql注入、xss攻击、md5加密算法)

标签:语句,xss,name,sql,SQL,注入
From: https://blog.csdn.net/qq_52368602/article/details/139315710

相关文章

  • 华为云GaussDB NoSQL云原生多模数据库的超融合实践
    华为云GaussDBNoSQL云原生多模数据库的超融合实践举报 GeminiDB-Redis博客 发表于2021/11/1613:37:30  2w+  0  0 【摘要】中国数据库大会分享,主题为GaussDBNoSQL架构设计。引言本届中国数据库技术大会(DTCC),不管是公有云数据库厂商,还是传统数据库厂商,都......
  • PostgreSQL 小课推广-20240529
    目前PostgreSQL小课在持续更新中,PostgreSQL小课专栏新人优惠券到2024年6月1日到期,有需要的伙伴还请关注下。优惠券马上到期,领取券后,也就只需要30元(也就一杯咖啡的钱)就可以解锁专栏,先到先得。目前专栏的50元/年,后续到期不需要续费,等到专栏完成,会有一个......
  • java+sql企业固定资产管理系统
    摘要:本文主要介绍的是固定资产管理系统的整个设计过程。第1章的绪论包括选题的背景,目的和意义,国内外现状;第2章平台简介包括JBuilder2005和SQLServer数据库的介绍;第3章系统分析,需求分析,数据流与数据字典,功能需求;第4章系统设计部分包括系统总体设计,功能模块设计,数据库设计;第5章......
  • Navicat远程连接阿里云mysql失败,提示2013,2003错误解决方案
    前情提要总结下使用过的各种解决方式,如修改cnf,修改安全组端口,修改防火墙,总有一款方案适合你(如果使用其他方式解决请评论补充,感谢)环境:本文全部使用yum方式安装服务,使用阿里云服务器centos7下文需要格外注意手动配置端口的部分确认已安装好mysql服务(yum安装)......
  • 一文搞懂 MySQL 日志
    前言MySQL的日志记录了运行的各种信息,是MySQL事务、性能、数据容灾、异常排查等的基础。本文将介绍MySQL一些关键日志的作用和原理。MySQLInnoDB引擎重要的三个日志:日志说明redolog重做日志,保证事务的持久性undolog回滚日志,来保证事务的原子性binlo......
  • MySQL查询详解:单表查询、多表查询、分组查询、子查询
    效率工具推荐一个程序员的常用工具网站,效率加倍嘎嘎好用:程序员常用工具云服务器云服务器限时免费领:轻量服务器2核4G腾讯云:2核2G4M云服务器新老同享99元/年,续费同价阿里云:2核2G3M的ECS服务器只需99元/年,续费同价MySQL查询详解:单表查询、多表查询、分组查询、子查询在......
  • SparkSQL编程-DataFrame
    SparkSession在老的版本中,SparkSQL提供两种SQL查询起始点:一个叫SQLContext,用于Spark自己提供的SQL查询;一个叫HiveContext,用于连接Hive的查询。从2.0开始,SparkSession作为Spark最新的SQL查询起始点,实质上是SQLContext和HiveContext的组合,所以在SQLContext......
  • SparkSQL概述
    为了给熟悉RDBMS(关系数据库管理系统)但又不理解MapReduce的技术人员提供快速上手的工具,hive应运而生,它是运行在Hadoop上的SQL-on-hadoop工具;但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,运行效率低;sparksql则是采用内存存储可以减少大量的中间......
  • 基于SqlSugar的开发框架循序渐进介绍(20)-- 在基于UniApp+Vue的移动端实现多条件查询的
    在做一些常规应用的时候,我们往往需要确定条件的内容,以便在后台进行区分的进行精确查询,在移动端,由于受限于屏幕界面的情况,一般会对多个指定的条件进行模糊的搜索,而这个搜索的处理,也是和前者强类型的条件查询处理类似的处理过程,因此本篇随笔探讨两种不同查询在前端界面上的展示效......
  • MySQL建表指南
    MySQL数据库,建一张表(table)时通常需要考虑如下因素:存储引擎自MySQL5.5.5版本开始,默认的存储引擎是InnoDB,除非你的库(database)显式声明了其他的存储引擎,SHOWENGINES;查看当前库(database)的默认存储引擎。字符集SHOWVARIABLESLIKE'character_set_database';查看当前库(da......