当前位置:首页 > 前端设计 > 正文

sql注入万能密码绕过登录,防止SQL注入的四种方法

sql注入万能密码绕过登录,防止SQL注入的四种方法

本篇文章给大家谈谈sql注入万能密码绕过登录,以及防止SQL注入的四种方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所...

本篇文章给大家谈谈sql注入万能密码绕过登录,以及防止SQL注入的四种方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

数据库预编译为什么能防止SQL注入

要回答这个问题,我们要知道怎么进行的SQL注入,所谓知己知彼,方能百战百胜。

什么是SQL注入??

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或页面请求url的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

实战举例

有个登陆框如下:

可以看到除了账号密码之外,还有一个公司名的输入框,根据输入框的形式不难推出SQL的写法如下:

SELECT*Fromtable_nameWHEREname='XX'andpassword='YY'andcorporate='ZZ'

怎么做呢,?

因为没有校验,因此,我们账号密码,都不填写,直接在最后,添加or1=1--

看看与上面SQL组合,成了如下:

SELECT*Fromtable_nameWHEREname=''andpassword=''andcorporate=''or1=1-'

从代码可以看出,前一半单引号被闭合,后一半单引号被“--”给注释掉,中间多了一个永远成立的条件“1=1”,这就造成任何字符都能成功登录的结果。

重要提醒

不要以为在输入框做个检查就够了,不要忘记了,我们web提交表单,是可以模拟url直接访问过去,绕开前段检查。因此,必须是后端,或是数据来检查才能有效防止。

(1)检查用户输入的合法性;

(2)将用户的登录名、密码等数据加密保存。

(3)预处理SQL。

(4)使用存储过程实现查询,虽然不推荐,但也是一个方法。

MySQL预处理是怎么防止的呢?

其实是因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如or'1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了!

具体像这样。例如刚刚那条SQL:

SELECT*Fromtable_nameWHEREname=''andpassword=''andcorporate=''or1=1-'

开启预编译执行SQL的时候,则不会这么处理。会当成一个属性值。什么意思。随便你怎么加,都是一个值。也就是说,如果中间有产生歧义的,都将被处理掉,最后执行相当于是这样:

SELECT*Fromtable_nameWHEREname=''andpassword=''andcorporate="'or1=1--"

这个大家应该看的懂吧,输入的一串,都被揉在一起,作一个参数,而不是SQL。

这样就无法进行SQL注入了。是不是很巧妙。

好了,回答完毕,你学到了吗?

老铁,码字不容易哈,高抬贵手,点赞+关注。

Web前端密码加密是否有意义

首先,我们要记住:在网络中任何场景下的加密都是有意义的!前端针对密码的加密同样如此。

我们要知道,HTTP协议有两个特性:

无状态

信息在网络传输过程中是透明的

HTTP协议不像HTTPS协议,HTTP协议中所有信息都是明文的,此时如果在传输过程中被拦载,像密码啥的黑客一看,就知道了。

所以很多站点在没有启用HTTPS时,也会对前端的密码做加密处理,比如腾讯QQ空间的帐号密码登录、还有其它网站,当我们在输入密码时,提交表单后,经常会看到密码框里的密码长度一下子就变长了,其实就是在我们提交表单时,前端对密码做了加密处理再赋值给密码字段,所以表象上看就是密码框里的黑点点变多了。

当在前端对密码做了加密处理,此时即使信息在传输过程中被窃取,第三方看到的是加密后的密码,他把这个密码拿去是没用的,因为这个加密串是有时间和其它一些特征的,在其它电脑/IP上提交服务端是验证不通过的。

最后,就算是WEB前端密码加密,不能简简单单用MD5对密码进行加密,必须要加一些特征字符在里面,另外也要限制一下时效,防止加密后的密文一直有效。如果能用HTTPS协议请一定用HTTPS协议。

如何学习web安全,需不需要学sql数据库

学习web安全肯定是要学习数据库的。

根据你所提的这个问题,觉得题主是刚刚接触web安全,有一定基础但没有深入了解。在这里提一些基础的建议。

1.语言的学习,web安全会涉及到很多语言,你需要有一定的语言基础,才能更加深入的理解目标网站,以至找到它漏洞所在。Web安全所需要的语言:php(大部分网站开发所用的语言),python(flask、dinggo框架、编写web脚本),java(web开发语言),go(web开发语言)。

2.基础的web安全知识。如计算机网络基础、http协议、php弱类型、sql注入漏洞、xss漏洞、文件包含漏洞等。其中sql注入漏洞,就需要结合数据库相关的知识进行攻击。

3.更进一步的学习。关注一些web安全相关的公众号,获取最新的web安全信息。如最新的cve、最新的绕过方式等。

4.推荐一个web安全学习的网址:https://github.com/CHYbeta/Web-Security-Learning。在这个网址你可以自主学习到web安全知识。另外你也可以通关打ctf比赛来提高自己web安全水平。

了解最新“智驭安全”产品、技术与解决方案,欢迎关注微信公众号:丁牛科技(Digapis_tech)。

sql注入好学吗

学习SQL注入是有一定难度的,但对于有一定编程和数据库知识的人来说,是可以学习和理解的。SQL注入是一种常见的安全漏洞,攻击者通过在用户输入的数据中插入恶意的SQL代码,从而绕过应用程序的验证和过滤机制,对数据库进行非法操作或获取敏感信息。学习SQL注入可以帮助开发人员和安全专家更好地理解和防范这种安全威胁,提高应用程序的安全性。

然而,需要注意的是,学习SQL注入并不意味着鼓励或支持进行非法攻击。学习应该以合法和道德的方式进行,并将所学知识应用于安全测试、漏洞修复和保护系统安全的工作中。

怎样写sql语句可以加上行级排它锁

看你需要加哪种类型的锁:HOLDLOCK将共享锁保留到事务完成,而不是在相应的表、行或数据页不再需要时就立即释放锁。HOLDLOCK等同于SERIALIZABLE。NOLOCK不要发出共享锁,并且不要提供排它锁。当此选项生效时,可能会读取未提交的事务或一组在读取中间回滚的页面。有可能发生脏读。仅应用于SELECT语句。PAGLOCK在通常使用单个表锁的地方采用页锁。READCOMMITTED用与运行在提交读隔离级别的事务相同的锁语义执行扫描。默认情况下,SQLServer2000在此隔离级别上操作。READPAST跳过锁定行。此选项导致事务跳过由其它事务锁定的行(这些行平常会显示在结果集内),而不是阻塞该事务,使其等待其它事务释放在这些行上的锁。READPAST锁提示仅适用于运行在提交读隔离级别的事务,并且只在行级锁之后读取。仅适用于SELECT语句。READUNCOMMITTED等同于NOLOCK。REPEATABLEREAD用与运行在可重复读隔离级别的事务相同的锁语义执行扫描。ROWLOCK使用行级锁,而不使用粒度更粗的页级锁和表级锁。SERIALIZABLE用与运行在可串行读隔离级别的事务相同的锁语义执行扫描。等同于HOLDLOCK。TABLOCK使用表锁代替粒度更细的行级锁或页级锁。在语句结束前,SQLServer一直持有该锁。但是,如果同时指定HOLDLOCK,那么在事务结束之前,锁将被一直持有。TABLOCKX使用表的排它锁。该锁可以防止其它事务读取或更新表,并在语句或事务结束前一直持有。UPDLOCK读取表时使用更新锁,而不使用共享锁,并将锁一直保留到语句或事务的结束。UPDLOCK的优点是允许您读取数据(不阻塞其它事务)并在以后更新数据,同时确保自从上次读取数据后数据没有被更改。XLOCK使用排它锁并一直保持到由语句处理的所有数据上的事务结束时。可以使用PAGLOCK或TABLOCK指定该锁,这种情况下排它锁适用于适当级别的粒度。

sql注入万能密码绕过登录和防止SQL注入的四种方法的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!

最新文章