网站安全之php防止注入攻击代码SQL攻击(英语:SQL),简称隐码攻击的原因php 防止sql注入
2022-12-24
SQL攻击(英文:SQL),简称隐藏代码攻击网站安全之php防止注入攻击代码,是一种发生在应用程序数据库层的安全漏洞。 简而言之,SQL 命令包含在输入字符串中,而在设计不佳的程序中忽略检查。 那么这些命令就会被数据库服务器误认为是正常的SQL命令而执行。 所以它被摧毁或入侵。
有人认为SQL隐藏代码攻击只针对SQL,但只要是支持批量处理SQL命令的数据库服务器,都有可能被这种方法攻击。
原因
如果应用程序存在以下情况,则应用程序可能会暴露于SQL的高危情况:
使用字符串连接在应用程序中组合 SQL 命令。
应用程序连接数据库时使用权限过高的账户(例如很多开发者喜欢使用最高权限的系统管理员账户(如 root、sa等)连接数据库)。
数据库中暴露了不必要但过于强大的功能(SQL 数据库中的扩展存储过程或 OLE 存储过程等)
过于信任用户输入的数据,不限制输入的字符数,不检查用户输入的数据是否有潜在的命令。
作用原理
SQL命令可以查询、插入、更新、删除等网站建设,以及一系列的命令。 分号字符是不同命令之间的区别。 (原函数是用于或作为查询、插入、更新、删除...等的条件表达式)
SQL 命令对传入的字符串参数使用单引号字符。 (但在SQL数据库中字符串中连续2个单引号字符被视为单引号字符)
SQL命令中可以包含注释(两个连续的减号——后面的文字是注释,或者“/*”和“*/”括起来的文字是注释)
因此,如果在组合SQL命令串时不替换单引号字符,在命令串中填充字符变量时,原SQL语法就会被恶意篡改。
例子
某网站登录验证SQL查询代码为
= " * FROM (name = '" + + "') and (pw = '"+ +"');"
恶意填充
=“1”或“1”=“1”;
和
=“1”或“1”=“1”;
, 将导致原始 SQL 字符串被填充为
= " * FROM (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
即实际运行的SQL命令会变成如下
=“*来自;”
因此,无需账户密码即可登录网站。 因此,SQL隐藏代码攻击俗称黑客的填空游戏。
可能的损坏
数据表信息泄露,如个人机密信息、账户信息、密码等。
数据结构被黑客检测到,可以进一步攻击(如* FROM sys.)。
数据库服务器被攻击,系统管理员账号被篡改(如sa WITH ='')。
获得更高的系统权限后,可以在网页中添加恶意链接、恶意代码、XSS等。
数据库服务器提供的操作系统支持允许黑客修改或控制操作系统(例如,“net stop”可以停止服务器的IIS服务)。
破坏硬盘数据,瘫痪整个系统(如“C:”)。
避免的方法
在设计应用程序时,使用参数化查询 ( ) 来设计数据访问功能。
组合SQL字符串时,首先对传入的参数进行字符替换(将单引号字符替换为连续的2个单引号字符)。
如果使用PHP开发网页程序网站安全之php防止注入攻击代码,还可以启用PHP的魔术引号()功能(自动向所有网页传入参数网站建设,将单引号字符替换为连续2个单引号字符)。
其他人,使用其他更安全的方式连接到 SQL 数据库。 例如,数据库连接组件,如 ASP.NET 对象或 LINQ to SQL,有固定的 SQL 数据隐藏代码问题。
使用 SQL 注入预防系统。