当前位置: 首页 > news >正文

全站仪如何建站购物网站app

全站仪如何建站,购物网站app,营销型网站建设公司哪里有,药厂网站建设SQL Injection (intro) SQL 命令主要分为三类#xff1a; 数据操作语言 #xff08;DML#xff09;DML 语句可用于请求记录 #xff08;SELECT#xff09;、添加记录 #xff08;INSERT#xff09;、删除记录 #xff08;DELETE#xff09; 和修改现有记录 #xff…SQL Injection (intro) SQL 命令主要分为三类 数据操作语言 DMLDML 语句可用于请求记录 SELECT、添加记录 INSERT、删除记录 DELETE 和修改现有记录 UPDATE。 如果攻击者成功地将 DML 语句“注入”到 SQL 数据库中则可能会破坏系统的机密性使用 SELECT 语句、完整性使用 UPDATE 语句和可用性使用 DELETE 或 UPDATE 语句 数据定义语言 DDLDDL 命令通常用于定义数据库的架构。架构是指数据库的整体结构或组织在 SQL 数据库中包括表、索引、视图、关系、触发器等对象。 如果攻击者成功地将 DDL 类型的 SQL 命令“注入”到数据库中他可能会破坏系统的完整性使用 ALTER 和 DROP 语句和可用性使用 DROP 语句。 数据控制语言 DCLDCL 可用于撤消和授予用户对数据库对象如表、视图和函数的权限。如果攻击者成功地将 DCL 类型的 SQL 命令“注入”到数据库中他可能会破坏系统的机密性使用 GRANT 命令和可用性使用 REVOKE 命令。例如攻击者可以授予自己对数据库的管理员权限或撤消真正管理员的权限。DCL命令用于实现对数据库对象的访问控制。GRANT - 授予用户对数据库对象的访问权限 REVOKE - 撤销以前使用 GRANT 授予的用户权限 GRANT语句用于授权用户或角色执行特定的数据库操作或访问特定的表。 下面是一个示例演示如何使用GRANT语句将表的SELECT权限授予用户username GRANT SELECT ON table_name TO username; 在上面的语句中将table_name替换为您要授予权限的表的实际名称并将username替换为您要授予权限的用户的实际名称。 SQL注入 SQL注入也称为SQLi是最常见的网络黑客技术之一。SQL 注入攻击包括通过从客户端到应用程序的 SQL 查询输入插入或“注入”恶意代码。如果处理不当SQL注入会严重影响数据的完整性和安全性。 SQL注入可以用于读取单个用户的数据。以下是黑客可能输入表单字段或接受用户输入的任何位置以试图利用 SQL 注入漏洞的几个数据示例 Smith’ OR ‘1’ 1 结果其中将返回 Users 表中的所有条目SELECT * FROM users WHERE name ‘Smith’ OR TRUE; Smith’ OR 1 1; – 结果与第一个示例一样也将返回 users 表中的所有条目SELECT * FROM users WHERE name ‘Smith’ OR TRUE;–; Smith’; DROP TABLE users; TRUNCATE audit_log; – 链接多个 SQL 命令以便 DROP users 表和删除 audit_log 表中的所有条目 成功的 SQL 注入漏洞可以 从数据库中读取和修改敏感数据、对数据库执行管理操作、关闭审核或 DBMS、截断表和日志、添加用户、恢复 DBMS 文件系统上存在的给定文件的内容、向操作系统发出命令 SQL 注入攻击允许攻击者 欺骗身份、篡改现有数据、导致否认问题例如取消交易或更改余额、允许完全披露系统上的所有数据、销毁数据或使其不可用、成为数据库服务器的管理员 字符串 SQL 注入 代码中的查询生成一个动态查询如上一示例所示。查询是通过连接字符串来构建的使其容易受到字符串 SQL 注入的影响 “SELECT * FROM user_data WHERE first_name ‘John’ AND last_name ” lastName “”; 数字 SQL 注入 代码中的查询生成一个动态查询如上一示例所示。代码中的查询通过连接一个数字来构建动态查询使其容易受到数字 SQL 注入的影响 SELECT * FROM user_data WHERE login_count Login_Count AND userid User_ID; SQL 查询链接 查询链接顾名思义。使用查询链接您可以尝试将一个或多个查询追加到 实际查询。您可以使用 ; 元字符来执行此操作。A ;标记 SQL 语句的结尾;它允许在初始查询之后立即启动另一个查询甚至不需要开始新行。 SQL注入如何影响CIA原则 使用字符串 SQL 注入损害机密性如可以查询不应该查到的信息。通过查询链接损害完整性使用查询链接您可以尝试将一个或多个查询追加到 实际查询。您可以使用 ; 元字符来执行此操作。A ;标记 SQL 语句的结尾;它允许在初始查询之后立即启动另一个查询甚至不需要开始新行。可以改变数据库数据。有许多不同的方法可以违反可用性。 如果帐户被删除或其密码被更改则实际所有者将无法再访问此帐户。 攻击者还可以尝试删除部分数据库甚至删除整个数据库以使数据无法访问。 撤销管理员或其他用户的访问权限是影响可用性的另一种方式;这将阻止这些用户以 WHDLE 的形式访问数据库的特定部分甚至整个数据库。 0x10 Login_Count:1 User_Id: 1 or 11 0x11 注意用–使后面的语句无效。 0x12 employee name: ; update employees set salary1000000 where last_name‘Smith’;-- -tan: 不填或者随便填 0x013 ; drop table access_log;-- - SQL Injection (advanced) 特殊字符 /* */ are inline comments – , # are line comments Example: SELECT * FROM users WHERE name ‘admin’ – AND pass ‘pass’ ; 允许语句连接 Example: SELECT * FROM users; DROP TABLE users; ,,|| 允许语句拼接 Char() strings without quotes Example: SELECT * FROM users WHERE name ‘char(27)’ OR 11 特别声明 SQL UNION 操作符 SQL UNION 操作符合并两个或多个 SELECT 语句的结果。 请注意UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时每个 SELECT 语句中的列的顺序必须相同。 SQL UNION 语法 SELECT column_name(s) FROM table1 UNION SELECT column_name(s) FROM table2; 注释默认地UNION 操作符选取不同的值。如果允许重复的值请使用 UNION ALL。 SQL UNION ALL 语法 SELECT column_name(s) FROM table1 UNION ALL SELECT column_name(s) FROM table2; 注释UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。 joion Join 运算符用于根据相关列合并两个或多个表中的行 SELECT * FROM user_data INNER JOIN user_data_tan ON user_data.useriduser_data_tan.userid; 有关JOINS的更多详细信息请访问https://www.w3schools.com/sql/sql_join.asp 0x13 ji’ union select userid,user_name,user_name,user_name,user_name,password,userid from user_system_data– 用union拼接即可需要注意第二个语句字段数和字段类型需要和user_data表的保持一致即可。 ’ or true union select 1,‘2’,‘3’,‘4’,‘5’,password, 7 from user_system_data– 这种查询也可以因为第二个语句只要password结果所以让其他为int的用数字char的用字符。 SQL盲注 在上面的SQL注入在文本框输入后会直接在页面显示我们输入的结果。 SQL盲注即输入后结果不显示。这种注入只能询问一些问题。 SQL盲注分为content-based and time-based SQL injections. 如https://shop.example.com/?article4 and 11 如果返回不存在则说明没有SQL注入问题。 基于时间注入article 4; sleep(10) – 如果存在注入则在返回结果之前会等待10s 预处理语句 在SQL中预处理语句prepared statement和语句statement都是用于执行SQL查询的方式但它们之间有一些关键区别。 预处理语句Prepared Statement 预处理语句是一种SQL语句的预编译形式它允许在执行之前对SQL语句进行编译。编译后的预处理语句可以重复使用而不需要每次执行时都重新编译。预处理语句通常用于执行参数化查询即带有动态插入值的查询。这样可以提高执行效率并减少SQL注入攻击的风险。预处理语句通常使用占位符如问号标记来表示动态插入的值这些占位符在执行预处理语句时会被实际的值替换。 示例使用问号占位符 sql PREPARE my_prepared_statement FROM ‘SELECT * FROM customers WHERE name ?’; EXECUTE my_prepared_statement USING ‘John’; 语句Statement 语句是SQL查询的基本单位它是一条完整的SQL命令用于执行特定的操作。语句可以是静态的也可以是动态的这取决于是否包含变量或参数。静态语句是固定的SQL查询不包含任何变量或参数。动态语句包含变量或参数需要在执行时提供实际的值。语句的执行效率相对较低因为每次执行都需要重新编译。 示例静态语句 sql SELECT * FROM customers; 示例动态语句 sql SELECT * FROM customers WHERE name ‘John’; 总结 预处理语句和语句的主要区别在于预处理语句是预先编译的可以重复使用适用于参数化查询而语句是即时的每次执行都需要重新编译适用于静态查询或不含变量的动态查询。在实际应用中为了提高性能和安全性通常推荐使用预处理语句来执行参数化查询。 如何防止SQL注入 如下方法是针对 SQL 注入的最佳防御措施。它们要么没有可以解释的数据要么将数据视为绑定到列而不进行解释的单个实体。 1、静态查询 SELECT * FROM products; SELECT * FROM users WHERE user “” session.getAttribute(“UserID”) “”; 2、 参数化查询使用预编译的SQL语句来执行查询 String query “SELECT * FROM users WHERE last_name ?”; PreparedStatement statement connection.prepareStatement(query); statement.setString(1, accountName); ResultSet results statement.executeQuery(); 使用预编译的SQL语句PreparedStatement有几个优点 防止SQL注入预编译的SQL语句使用占位符?来代替动态插入的值这样就可以防止恶意用户在查询中注入额外的SQL代码。 提高性能预编译的SQL语句只需要编译一次然后可以多次执行这样可以提高数据库的性能。 如 public static bool isUsernameValid(string username) {RegEx r new Regex(^[A-Za-z0-9]{16}$);return r.isMatch(username); }// java.sql.Connection conn is set elsewhere for brevity. PreparedStatement ps null; RecordSet rs null; try {pUserName request.getParameter(UserName);if ( isUsernameValid (pUsername) ) {ps conn.prepareStatement(SELECT * FROM user_tableWHERE username ? );ps.setString(1, pUsername);rs ps.execute();if ( rs.next() ) {// do the work of making the user record active in some way}} else { // handle invalid input } } catch (...) { // handle all exceptions ... }3、存储过程 仅当存储过程不生成动态 SQL 时 4、即使采用了参数化查询也需要进行输入验证要同时进行这两种处理。 因为可以防止其他类型的攻击存储在数据库中如存储的 XSS、信息泄露、逻辑错误 - 业务规则验证、SQL注入 0x05 0x06 编写一段代码实现查询name并防止SQL注入 try {Connection conn null;connDriverManager.getConnection(DBURL,DBUSER,DBPW);//连接数据库String queryselect * from users where name?;//查询语句PreparedStatement sconn.prepareStatement(query);//PreparedStatement对象是预编译的SQL语句可以传递参数并执行查询。s.setString(1,Bob);//将查询的参数值设置为Bob。参数的索引从1开始对应于查询字符串中的参数占位符。ResultSet resultss.executeQuery();//执行查询并将查询结果存储在ResultSet对象results中} catch (Exception e) {System.out.println(Oops. Something went wrong!); }Path traversal 目录遍历 路径目录遍历是一种漏洞攻击者能够访问或存储外部的文件和目录 应用程序运行的位置。这可能会导致从其他目录读取文件如果是文件则会导致读取文件 上传覆盖关键系统文件。 它是如何工作的 例如假设我们有一个应用程序它托管了一些文件并且可以在下面请求它们 格式http://example.com/filereport.pdf 现在作为攻击者您当然对其他文件感兴趣所以 你试试http://example.com/file…/…/…/…/…/etc/passwd/etc/passwd…/在这种情况下您尝试爬到文件系统的根目录 然后进入以获取对此文件的访问权限。称为点-点-斜杠这是这种攻击的另一个名称
http://www.hkea.cn/news/14265857/

相关文章:

  • 专业网站推广软件网站属于什么公司
  • jsp做的网站代码平面设计软件哪个好用
  • 如何建立自己的微网站广告投放平台公司
  • 医疗教育的网站建设网站建设与管理设计
  • 武义建设局网站第1模板网
  • 物流网站首页图片红酒网站建设方案
  • wordpress 导航站模板装修网站建设方案
  • 国际域名的外贸网站太原那有网站设计公司
  • 建湖县建设局网站制作属于自己的app教程
  • 手机网站开发还是调用wordpress pshow
  • 工商局网站查询入口百度关键词优化软件排名
  • 深圳网站制作07551购物网站毕业设计论文
  • 开封府景点网站建设的目的宁波网站建设主页
  • 淘宝买cdk自己做网站近期十大热点事件
  • 婚恋网站做翻译西安制作网站
  • 怎么做网上网站宁波做公司网站的公司
  • 网站开发公司会在最后面加上公司自己制作的网站
  • 缙云企业网站建设浙江进出口贸易公司名录
  • 企业网站建设的注意事项373网站怎么做这样的网站
  • 为什么资讯网站荣誉被收录从网上下载的网站源码怎么用
  • 电商网站开发用什么语言如何远程连接 网站 数据库
  • 衡水企业做网站多少钱自己做名片的网站
  • 广州 seo的网站信息网站方案
  • 企业怎么建设网站建e室内设计网官网全景效果图
  • 西安网站建设云阔什么是商城网站建设
  • 长沙网站建设制作合肥网站搜索优化
  • 淄博网站建设设计策划方案模板
  • 南京做网站哪家公司最好谷歌google官网下载
  • 代刷网自助建站系统制作网页的网站
  • 上海网站建设哪家强怎样做网站的二维码