【WEB安全】SQL注入 点击劫持

ClickJacking

点击劫持

点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。

比如,通过iframe标签把某博客网站的点赞按钮放置在一个图片上,然后设置成透明,当你点击图片时候其实是点击到iframe图层的点赞按钮,默认发送信息出去。

防御点击劫持手段:

1、X-FRAME-OPTIONS

X-FRAME-OPTIONS 是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头 就是为了防御用 iframe 嵌套的点击劫持攻击。
该响应头有三个值可选,分别是:
DENY,表示页面不允许通过 iframe 的方式展示
SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示
ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示

2、通过JS方式
<head>
    <style id="click-jack">
        html {
            display: none !important;
        }
    </style>
    </head>
    <body>
    <script>
        if (self == top) {
            var style = document.getElementById('click-jack')
            document.body.removeChild(style)
        } else {
            top.location = self.location
        }
    </script>
</body>

以上代码中:
top是浏览器的网页顶层
self是当前网站所在层级
以上代码的作用是:判断网页所在层级,如果是通过iframe嵌入的网站,那么self == top 是不成立的,那么html样式的display将会永远为none。

SQL注入

// 填入特殊密码
1'or'1'='1
// 拼接后的SQL
SELECT *
FROM test.user
WHERE username = 'laowang'
AND password = '1'or'1'='1'
防御SQL注入攻击手段:

所有的查询语句建议使用数据库提供的参数化查询接口**,参数化的语句使用参数而不是将用户输入变量嵌
入到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query 方法中的 ? 占位参
数。

// 错误写法
const sql = `
    SELECT *
    FROM test.user
    WHERE username = '${ctx.request.body.username}'
    AND password = '${ctx.request.body.password}'
`
console.log('sql', sql)
res = await query(sql)
// 正确的写法
const sql = `
    SELECT *
    FROM test.user
    WHERE username = ?
    AND password = ?
`


console.log('sql', sql, )
res = await query(sql,[ctx.request.body.username, ctx.request.body.password])

严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如使用正则表达式进行一些匹配处理。对进入数据库的特殊字符(’,",\,<,>,&,*,; 等)进行转义处理,或编码转换**。基本上所有的后端语言都有对字符串进行转义处理的方法,比如lodash 的 lodash._escapehtmlchar 库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值