【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方式


    
    
    
    

以上代码中:
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 库。

你可能感兴趣的:(WEB安全)