Web安全 - 路径穿越(Path Traversal)
文章目录
- OWASP 2023 TOP 10
- 导图
- 定义
- 路径穿越的原理
- 常见攻击目标
- 防御措施
- 输入验证和清理
- 避免直接拼接用户输入
- 最小化权限
- 日志监控
- Example
- Code
- 漏洞代码:路径穿越攻击案例
- 漏洞说明
- 修复后的安全代码
- 代码分析
- 其他
- 不同文件系统下的路径穿越特性
- Windows系统
- 类Unix系统(Linux/Unix)
- 路径穿越的进阶利用场景
- 文件写入攻击
- 目录遍历结合文件上传
- 日志注入
- 路径穿越与其他漏洞的组合利用
- 结合命令注入
- 结合本地文件包含(LFI)
- 路径穿越的检测与修复实践工具
- 检测工具
- 修复工具和实践
OWASP 2023 TOP 10
OWASP Top 10 概述
OWASP (Open Web Application Security Project) Top 10 是一份最常见和最危险的Web应用安全风险列表,由安全专家定期更新。 旨在提高开发人员、测试人员以及组织的安全意识并帮助他们预防这些漏洞。
2023年OWASP Top 10 列表
主流防范措施
-
Broken Access Control
- 描述:未能正确执行访问控制,允许用户访问他们不应该拥有的权限或资源。这可能导致数据泄露、数据篡改等问题。
- 防御措施:严格实施基于角色的访问控制(RBAC),并确保敏感操作具有足够的授权检查。
-
Cryptographic Failures
- 描述:不当的加密实践或加密算法的使用不当,可能导致敏感数据(如密码、信用卡信息)被暴露或窃取。
- 防御措施:使用最新的加密标准(如AES-256-GCM、RSA-2048),并避免使用弱或过时的加密算法。
-
Injection
- 描述:应用未能对用户输入进行有效的验证或转义,导致恶意代码注入(如SQL注入、命令注入)并执行在服务器上。
- 防御措施:使用参数化查询、输入验证、输出转义技术,避免拼接SQL或动态代码。
-
Insecure Design
- 描述:系统在设计阶段未考虑安全问题,导致应用架构中的基本安全漏洞。
- 防御措施:在开发生命周期中引入威胁建模、攻击面分析等设计阶段的安全审查。
-
Security Misconfiguration
- 描述:错误的配置(如不安全的默认设置、过时的软件或未配置的安全功能),可能使应用程序面临攻击。
- 防御措施:定期审计和测试系统配置,使用自动化工具识别和修复配置问题。
-
Vulnerable and Outdated Components
- 描述:使用了具有已知漏洞或未及时更新的第三方库和组件,可能被攻击者利用。
- 防御措施:确保使用依赖管理工具(如Maven、npm),并定期更新组件,避免使用过时的版本。
-
Identification and Authentication Failures
- 描述:认证和身份验证流程中的缺陷,可能导致用户冒充、会话劫持等问题。
- 防御措施:实施强密码策略、使用多因素认证(MFA)和加固会话管理机制。
-
Software and Data Integrity Failures
- 描述:未能保证软件更新和数据的完整性,可能使攻击者篡改关键数据或上传恶意更新。
- 防御措施:使用签名机制来验证更新包的完整性,确保数据在传输和存储过程中的可靠性。
-
Security Logging and Monitoring Failures
- 描述:缺乏适当的日志记录和监控,无法有效检测、响应或追踪安全事件。
- 防御措施:实施集中化的日志记录、主动的监控和告警系统,确保能够及时发现并响应异常行为。
-
Server-Side Request Forgery (SSRF)
- 描述:攻击者通过伪造服务器端的请求来获取未授权的内部资源或数据,通常利用未受限制的服务器端请求机制。
- 防御措施:限制服务器端可以发起的请求范围,避免允许用户输入直接控制服务器端的请求参数。
重点风险与防御措施建议
-
Broken Access Control:最重要的防御措施是定期审查权限设计,确保每个用户只能访问必要的资源。建议结合应用的访问控制系统与自动化测试工具,确保权限配置不被篡改。
-
Cryptographic Failures:确保敏感数据加密和密钥管理机制符合行业标准,如使用硬件安全模块(HSM)来保护密钥。避免明文传输或存储敏感数据。
-
Injection:对于Web应用来说,防止注入攻击的最佳实践是始终使用参数化查询和预编译的语句。严禁直接拼接用户输入构建SQL或命令。
-
Security Misconfiguration:安全配置管理应作为持续改进的一部分,尤其是在引入新服务或更新系统时,保持自动化的安全配置审计机制至关重要。
-
SSRF:严格限制后端服务器能够访问的网络和资源,禁止对内部资源(如metadata或本地IP)发起请求。
导图
定义
路径穿越(Path Traversal)是一种Web应用漏洞,攻击者通过操控输入文件路径参数,以访问系统上未经授权的文件。通过路径穿越,攻击者可以使用诸如../
的相对路径绕过访问限制,读取系统敏感信息或修改配置文件。
路径穿越的原理
在路径穿越攻击中,攻击者通常通过修改应用程序中的文件路径参数,加入目录遍历符号(如../
),访问原本受保护的文件。比如,应用预期访问/home/user/documents/report.txt
,但攻击者通过构造路径如../../../etc/passwd
,尝试读取系统中的/etc/passwd
文件。
常见攻击目标
路径穿越通常针对以下目标:
- 访问配置文件(如
/etc/passwd
或.htaccess
) - 查看应用程序源码
- 获取用户数据或凭证文件
- 修改或删除系统重要文件
防御措施
输入验证和清理
- 严格验证和过滤用户输入的文件路径,阻止包含
../
或其他路径操作符的非法字符。 - 使用白名单机制,限制文件访问路径为预定义的安全目录。
- 使用安全的文件操作API,确保不会意外解析相对路径。
避免直接拼接用户输入
- 避免通过字符串拼接方式直接将用户输入的路径用于文件系统访问操作。
- 应使用函数如
Path.normalize()
或realpath()
等,将用户输入的路径转换为绝对路径并进行校验。
最小化权限
- 确保Web应用程序的执行环境有最小的权限,只能访问和修改必要的文件。
- 使用沙箱机制或强制Web应用程序只能在特定的、安全的目录下操作。
日志监控
- 配置适当的日志和监控系统,及时发现路径穿越攻击的尝试。
- 例如,检测访问日志中出现大量的
../
字符序列可能是攻击的预兆。
Example
假设一个文件下载应用存在如下漏洞:
String filePath = "/var/www/uploads/" + request.getParameter("fileName");
File file = new File(filePath);
攻击者可以通过构造恶意输入fileName=../../../../etc/passwd
下载系统文件。为了防止此类攻击,可使用如下防御代码:
String fileName = request.getParameter("fileName");
fileName = fileName.replaceAll("[^a-zA-Z0-9._-]", ""); // 只允许安全字符
File file = new File("/var/www/uploads/", fileName);// 检查文件是否在指定的目录内
if (!file.getCanonicalPath().startsWith("/var/www/uploads/")) {throw new SecurityException("非法路径访问");
}
Code
漏洞代码:路径穿越攻击案例
下面的代码允许用户通过URL参数提供文件名,服务器根据该参数返回文件内容:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class FileDownloadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String fileName = request.getParameter("fileName"); // 从URL参数获取文件名File file = new File("/var/www/uploads/" + fileName); // 拼接用户输入路径if (file.exists()) {response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());Files.copy(file.toPath(), response.getOutputStream()); // 返回文件内容} else {response.getWriter().println("File not found");}}
}
漏洞说明
攻击者可以通过构造恶意输入,例如fileName=../../../../../etc/passwd
,试图访问服务器上的敏感文件。这是一个典型的路径穿越漏洞。
修复后的安全代码
在修复代码中,我们通过以下步骤防止路径穿越攻击:
- 对用户输入的文件名进行严格过滤。
- 使用文件路径校验,确保文件在合法的目录内。
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.Path;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SafeFileDownloadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String fileName = request.getParameter("fileName");// 1. 对输入进行严格验证,只允许合法的文件名字符if (fileName == null || !fileName.matches("[a-zA-Z0-9._-]+")) {response.getWriter().println("Invalid file name");return;}// 2. 定义安全的基础目录String baseDirectory = "/var/www/uploads/";// 3. 使用File类获取文件的绝对路径File file = new File(baseDirectory, fileName);String canonicalPath = file.getCanonicalPath();// 4. 确保文件在指定的合法目录内,避免路径穿越if (!canonicalPath.startsWith(baseDirectory)) {response.getWriter().println("Unauthorized access attempt detected");return;}// 5. 检查文件是否存在if (file.exists() && !file.isDirectory()) {response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());Files.copy(file.toPath(), response.getOutputStream());} else {response.getWriter().println("File not found");}}
}
代码分析
- 输入验证:使用正则表达式
[a-zA-Z0-9._-]+
只允许字母、数字、点、下划线和破折号,过滤掉可能的非法字符(如../
)。 - 路径规范化:
getCanonicalPath()
方法会将相对路径转换为绝对路径,并去除目录遍历符号,从而避免路径穿越攻击。 - 目录限制:通过确保
canonicalPath.startsWith(baseDirectory)
,保证文件只能在指定的安全目录下访问,防止访问外部文件。
其他
不同文件系统下的路径穿越特性
路径穿越攻击的表现可能因操作系统和文件系统的不同而有所差异。理解这些差异有助于更好地防御路径穿越漏洞。
Windows系统
- 在Windows系统上,目录路径通常使用反斜杠(
\
),而非类Unix系统的正斜杠(/
)。 - 由于历史原因,Windows的文件系统对大小写不敏感,所以文件名如
file.txt
和File.txt
指向同一文件。这可能会导致攻击者通过混淆大小写绕过某些路径验证机制。 - Windows也支持一些特殊的设备文件,如
CON
、AUX
等,这些设备文件名不能作为文件存储。这可能被滥用为特殊攻击路径。
类Unix系统(Linux/Unix)
- 类Unix系统严格区分大小写。攻击者可以利用路径名大小写的差异尝试绕过路径验证逻辑。
/
符号是路径的根,因此../../
攻击在类Unix系统上非常有效。- 像
/etc/passwd
这样的配置文件在类Unix系统上非常有价值,通常是攻击者的目标。
路径穿越的进阶利用场景
除了简单的读取文件外,路径穿越攻击可以通过复杂的方式进一步利用:
文件写入攻击
- 如果应用程序允许写入文件且路径参数可控,攻击者可以通过路径穿越漏洞覆盖关键文件。例如,攻击者可以覆盖配置文件、脚本或日志文件,执行远程代码执行(RCE)攻击。
- 示例:攻击者可能通过构造路径覆盖
/var/www/html/config.php
,从而修改配置参数。
目录遍历结合文件上传
- 当路径穿越与文件上传漏洞结合时,攻击者可以通过目录遍历将恶意文件上传到Web服务器的可执行目录(如
/var/www/html
),然后通过URL直接访问该文件以执行代码。
日志注入
- 如果路径穿越漏洞允许访问日志文件,攻击者可以注入恶意日志内容,使之被后续的日志解析过程错误处理,导致代码执行或服务中断。
路径穿越与其他漏洞的组合利用
路径穿越漏洞常与其他Web漏洞结合使用,以实现更强大的攻击效果:
结合命令注入
- 如果路径穿越漏洞允许访问系统的敏感文件,攻击者可以利用这些文件的内容进一步进行命令注入或其他攻击。
- 例如,读取服务器配置文件(如
/etc/ssh/sshd_config
)后,攻击者可能会利用暴露的SSH端口或用户信息尝试其他方式的入侵。
结合本地文件包含(LFI)
- LFI漏洞允许攻击者通过URL包含服务器上的文件。如果LFI漏洞与路径穿越结合,攻击者可以控制所包含的文件路径,甚至可能导致远程代码执行。
- 示例:结合PHP的文件包含漏洞,攻击者可能尝试访问
../../../../var/www/html/uploads/shell.php
,从而执行恶意代码。
路径穿越的检测与修复实践工具
以下是一些路径穿越漏洞的检测工具和修复实践建议:
检测工具
- Burp Suite:Burp Suite是一个强大的渗透测试工具,包含对路径穿越漏洞的自动扫描和检测功能。
- OWASP ZAP:这是另一款流行的开源Web应用安全扫描工具,可以帮助检测路径穿越等常见漏洞。
- Nikto:Nikto是一个开源的Web服务器扫描工具,它可以检查服务器配置和漏洞,包括路径穿越攻击的可能性。
修复工具和实践
- 静态代码分析工具:工具如SonarQube和Checkmarx可以扫描代码中不安全的路径操作,帮助开发者及早发现潜在的路径穿越漏洞。
- 代码审计和渗透测试:定期进行代码审计和渗透测试,模拟攻击路径穿越漏洞,确保防护机制有效。
- CI/CD集成测试:在持续集成和部署流程中引入安全测试步骤,防止路径穿越漏洞被引入生产环境。
相关文章:
Web安全 - 路径穿越(Path Traversal)
文章目录 OWASP 2023 TOP 10导图定义路径穿越的原理常见攻击目标防御措施输入验证和清理避免直接拼接用户输入最小化权限日志监控 ExampleCode漏洞代码:路径穿越攻击案例漏洞说明修复后的安全代码代码分析 其他不同文件系统下的路径穿越特性Windows系统类Unix系统&a…...
JSR303微服务校验
一.创建idea 二.向pom.xml添加依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.7.RELEASE</version></parent><properties><java.vers…...
56. QTreeWidget的基本使用
1. 说明 在软件开发中会遇到将数据信息制作成一种树目录的形式进行展示,那么此时就可以借助QT提供的QTreeWidget控件来实现这种需求,本篇博客会做一个案例简要说明这个控件的基本使用方法,博客中代码能够实现的功能是将此项目代码所在文件夹中的内容展示出来,如下图所示:…...
领域偏移:协变量移位下的域自适应
现在我们将焦点转移到一种叫做协变量转移的扰动上。我们在一个分类或回归设置中工作,我们希望从x预测y,并假设p≈(y | x)和p∗(y | x)是相同的(标记函数在训练和测试之间不会改变) 假设 (Covariate Shift)。对于列车分布p~和检验分布p∗,我们…...
前端开发技术框架选型
一、引言 在前端开发领域,技术框架的选择对于项目的成功至关重要。一个优秀的前端框架不仅可以提高开发效率,还能确保项目的稳定性和可扩展性。而不同的框架具有不同的特点和优势,能够满足不同项目的需求。下面将对目前主流的前端开发技术框…...
/etc/init.d/mysql
Since you’ve installed MySQL from source, you’ll need to create a custom init script to manage the MySQL server (start, stop, status) similarly to a service. Here’s a simple init.d script template for MySQL that you can use. This script assumes MySQL is…...
Qt_线程介绍与使用
目录 1、QThread常用API 2、Qt线程安全 3、使用线程QThread 4、connect函数的第五个参数 5、Qt互斥锁 5.1 QMutexLocker 6、条件变量 7、信号量 结语 前言: 线程是应用程序开发非常重要的概念,在Qt中,用QThread类来实现多线程&a…...
通讯方面的数据,人工智能 机器学习的时候,因为数字都接近于一,数据归一化的一种方法,做了一个简化版本的Z-score标准化
这个表达式实现了一种形式的数据归一化,它将张量x中的每个元素除以x的标准差的估计值。这种处理方式可以使得变换后的数据具有单位标准差(假设数据已经是零均值或者在计算过程中考虑了均值)。具体来说,它是基于以下步骤进行的&…...
python itertools模块介绍
itertools 是 Python 内建的一个高效处理迭代器的模块,提供了创建复杂迭代器的函数工具。它包含一系列用于迭代、组合、排列、过滤等功能的迭代器构建工具,常用于数据处理和算法设计。下面是 itertools 模块中一些常见的函数介绍: 1. 无限迭…...
【分布式微服务云原生】5分钟深入剖析Kafka:Leader与Follower分区的秘密及负载均衡的艺术
深入剖析Kafka:Leader与Follower分区的秘密及负载均衡的艺术 摘要: Apache Kafka作为当前最流行的分布式流处理平台之一,其内部的分区机制和消费者组的负载均衡策略是实现高吞吐量和高可靠性的关键。本文将深入探讨Kafka中Leader分区与Follo…...
在线代码编辑器
在线代码编辑器 文章说明前台核心代码后台核心代码效果展示源码下载 文章说明 采用Java结合vue3设计实现的在线代码编辑功能,支持在线编辑代码、运行代码,同时支持导入文件,支持图片识别,支持复制代码,可将代码导出为图…...
深入了解 MPlayer:Linux 系统中的多功能多媒体播放器
文章目录 深入了解 MPlayer:Linux 系统中的多功能多媒体播放器一、MPlayer 的安装二、MPlayer 的基本使用三、MPlayer 音频功能详解1. 支持的音频格式2. 调整音频输出设备3. 使用音频滤镜和效果4. 音频输出格式转换5. 多声道与环绕声支持6. 音频控制:播放…...
Netty系列-7 Netty编解码器
背景 netty框架中,自定义解码器的起点是ByteBuf类型的消息, 自定义编码器的终点是ByteBuf类型。 1.解码器 业务解码器的起点是ByteBuf类型 netty中可以通过继承MessageToMessageEncoder类自定义解码器类。MessageToMessageEncoder继承自ChannelInboundHandlerAdap…...
OpenHarmony标准系统上实现对rk系列芯片NPU的支持(npu使用)
在上篇文章中,我们学习了移植rk的npu驱动到OpenHarmony提供的内核。本文我们来学习如何在OpenHarmony标准系统rk系列芯片如何使用npu OpenHarmony RK系列芯片运行npu测试用例 在移植npu驱动到OpenHarmony之后,来运行npu样例进行简单测试 1.O 测试准备…...
大表性能优化的关键技术
1 引言 在现代企业应用中,随着数据量的不断增长,大表的性能优化成为数据库管理的重要环节。本文将探讨大表性能优化的关键技术,包括索引优化、查询优化、分区分表、读写分离以及缓存策略等方面。通过综合运用这些技术,可以显著提升大表的处理效率和响应速度,确保系统的稳…...
广联达 Linkworks办公OA Service.asmx接口存在信息泄露漏洞
漏洞描述 广联达科技股份有限公司以建设工程领域专业应用为核心基础支撑,提供一百余款基于“端云大数据”产品/服务,提供产业大数据、产业新金融等增值服务的数字建筑平台服务商。广联达OA存在信息泄露漏洞,由于某些接口没有鉴权,…...
如何成为成功的AI产品经理:经验与策略分享
引言 随着人工智能(AI)技术的迅猛发展,AI产品经理(AI PM)的角色变得越来越重要。Google AI产品负责人Marily Nika在最近的一次播客中分享了她在AI产品管理领域的宝贵经验和见解。本文将整理并总结她的核心内容,帮助有志于进入AI PM领域的人士了解如何准备、所需的核心技…...
spring loCDI 详解
文章目录 一、IoC & DI 基本知识1.1 IoC 的基本概念:1.2 IoC 的优势:1.3 DI 介绍: 二、IoC 详解2.1 Spring 容器:2.2 被存储 Bean 的命名约定:2.3 Bean 的存储方式:2.3.1 五大类注解:2.3.1.…...
遇到 Docker 镜像拉取失败的问题时该如何解决
遇到 Docker 镜像拉取失败的问题时,可以按照以下步骤进行排查和解决: 1. 检查网络连接 确保你的计算机可以访问互联网。尝试 ping 通 Docker Hub 或其他镜像仓库的域名: ping hub.docker.com2. 检查 Docker 服务状态 确保 Docker 服务正在…...
【C/C++】错题记录(三)
题目一 题目二 题目三 题目四 题目五 题目六 题目七??? 题目八 这道题主要考查对数据类型和位运算的理解与运用。 分析选项 A: *((unsigned char *)(&number) 1)0xcd; 这里将 number 的地址强制转换为 unsigned char* 类型&a…...
深入理解Web浏览器与服务器的连接过程
目录 1. 域名解析:找到地址 2. TCP连接:建立通信 3. HTTP请求:点菜 4. 服务器处理请求:厨房做菜 5. HTTP响应:上菜 6. 客户端接收响应:品尝美食 7. 关闭TCP连接:吃完离开 8. 持久连接&a…...
深入解析 https
我的主页:2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的,可能会出现运营商劫持等安全问题,运营商通过劫持 http 流量,篡改返回的网页内容,例如广告业务,可能会通过 Referer 字段 来统计是…...
NP-hard问题
一、前置知识 1.多项式 多项式是由变量(如x、y等)和系数通过有限次的加、减、乘运算得到的表达式。例如3x^22x 1就是一个关于(x)的多项式 2.时间复杂度 时间复杂度是用来衡量算法运行效率的一个指标。它描述了算法运行时间随着输入规模增长而增长的量…...
【Nacos架构 原理】内核设计之Nacos通信通道
文章目录 Nacos通信通道 (长链接)现状背景场景分析配置服务 长链接核心诉求功能性诉求负载均衡连接生命周期 Nacos通信通道 (长链接) 现状背景 Nacos 1.X 版本 Config/Naming 模块各自的推送通道都是按照自己的设计模型来实现的…...
【单片机】单片机map表详细解析
1、RO Size、RW Size、ROM Size分别是什么 首先将map文件翻到最下面,可以看到 1.1 RO Size:只读段 Code:程序的代码部分(也就是 .text 段),它存放了程序的指令和可执行代码。 RO Data:只读…...
考研笔记之操作系统(三)- 存储管理
操作系统(三)- 存储管理 1. 内存的基础知识1.1 存储单元与内存地址1.2 按字节编址和按字编址1.3 指令1.4 物理地址和逻辑地址1.5 从写程序到程序运行1.6 链接1.6.1 静态链接1.6.2 装入时动态链接1.6.3 运行时动态链接 1.7 装入1.7.1 概念1.7.2 绝对装入1…...
vim/vi常用命令大全
启动和退出Vim 命令/操作作用vim启动Vimvim filename直接打开指定的文件命令模式下,输入 :q退出,q!强制退出:wq保存并退出:wq!保存并强制退出vim中按下a进入编辑模式Esc退出编辑模式进入命令模式new创建新窗口close关闭窗口 光标移动 命令/操作作用h、…...
什么是大语言模型,一句话解释
定义 先说语言模型(Language Model)旨在建模词汇序列的生成概率,提升机器的语言智能水平,使机 器能够模拟人类说话、写作的模式进行自动文本输出。 白话:语言模式是一种解决机器与人类交流的手段,机器人与…...
【数据库】 MongoDB 撤销用户的角色和权限
在 MongoDB 中,撤销用户的角色和权限是一项重要的管理任务,确保用户仅能访问和操作他们需要的数据。以下是如何撤销用户的角色和权限的详细步骤。 1. 使用 MongoDB Shell 撤销角色 1.1 修改用户角色 要撤销用户的角色,可以使用 updateUser…...
vue2接入高德地图实现折线绘制、起始点标记和轨迹打点的完整功能(提供Gitee源码)
目录 一、申请密钥 二、安装element-ui 三、安装高德地图依赖 四、完整代码 五、运行截图 六、官方文档 七、Gitee源码 一、申请密钥 登录高德开放平台,点击我的应用,先添加新应用,然后再添加Key。 如图所示填写对应的信息&…...
织梦网站模板免费/如何提高seo关键词排名
因为项目需要,最近研究了一下在mysql数据库下如何动态新建以及删除分区表。如果全部借助存储过程的话,新建以及删除分区表在逻辑上比较死板、不灵活,而且还容易出错。因此,我新建了一个数据表table_fen_qu,借助这个表可…...
网站怎么做充值提现功能/苏州seo免费咨询
基本数据类型: 字符串: 字符串可以相加, 表示连接; 可以将字符串乘以某个数,表示将此字符串复制多少次. 数: 数的加减乘除取余等. 需要注意的是两个乘号**和两个除号/ / python2中的除法和3有所不同,那么需要import math ,然后使用math方法来达到和…...
网站模板下载模板下载安装/什么是网络营销渠道
在myeclipse中deploy:选择了一个工程,添加一个新的deploy工程时,不能正常出现deploy Location,可能的原因是没有在mymatadata中添加context-root"/",另外webrootdir属性也要设置正确。一个常见的配置如下&am…...
余姚网站建设公司/广州网络推广seo
使用PropertyGrid控件,如果直接自定义一个show对象SomeProperties,然后propertyGrid1.SelectedObject new SomeProperties();所有的属性都会以一行文本显示,如果有个属性可能出现文字较多的情况,那么一行文本显然是不够的&#x…...
制作网站支付方式/营销策略有哪些内容
现在国内的 Java 主力版本仍是 Java 8,所以对于「Java 8 是否要收费」这个问题,十分有必要阐述清楚,以消除不必要的恐慌。首先要明确一点,Java 仍然是免费的,并不需要付费使用!下面解释「Java 8 要收费」这…...
自己做网站都需要什么/cps广告是什么意思
[转载]风声水起的blog题目:已知strcpy函数的原型是:char * strcpy(char * strDest,const char * strSrc);1.不调用库函数,实现strcpy函数。2.解释为什么要返回char *。解说:1.strcpy的实现代码char * strcpy(char * strDest,const…...