在开发大型系统(如企业应用程序、共享软件包、库……)的过程中,多个层次和开发人员相互沟通,出现了如何处理新代码版本发布的问题。 让我们看一个例子,我们想为一个社区的开发者开发一个共享的Composer包。 语义版本管理 在解决后向和前向兼容性问题之前,我们需要弄清楚如何跟踪软件的变化。目前(2022年),将所有的改动都放到Git中是最好的方式。软件库可以共享,例如,通过GitHub或GitLab。每个软件变更都有一个唯一的标识符,用于识别每个提交,并描述实际发生的情况。 在开发图书馆时,以下策略…
在向知识渊博、经验丰富的项目负责人咨询时,我经常遇到数字项目的长期可持续性问题。许多超过3年开发的大型项目开始变得内部过时,不再具有可持续性--现在想象一下,一个由知识、经验和最重要的勤奋程度不同的开发人员组成的团队。 为了使你的数字项目在技术上保持最高水平,你需要。 有能力的开发人员和一个项目经理,他们有很好的沟通,每个人都知道自己在做什么,以及对其他人有什么影响。 功能工具和工作流程,整个团队都知道,并相应地调整他们的工作给他人。 自动化的任务,提供了一个很容易忘记的日常工作,这一点极为重要…
由于你已经开发了一段时间的网络应用程序,你可能已经注意到,许多事情对你来说是例行公事式的重复,尽管它们不应该是这样。很多时候,它是技术项目管理、文件版本管理、自动代码审查、各种数据处理,或者可能是部署到服务器和围绕这些的安全问题。 在公司的咨询中,我经常遇到这样的问题,即预防被大大低估了。原因往往是开发人员认为有些事情非常具有挑战性,会给他们增加工作。但事实是,你通常只需要设置一次整个设置,然后就可以获得长期的收益。 什么是CI(持续集成)? CI/CD是一种工具,可以将具有类似基础并在项目中不…
在PHP中,在基本水平上检测一个IP地址是非常容易的。 echo '你知道,你的IP地址是' . $_SERVER['REMOTE_ADDR'] . '?'; 警告:获取IP地址作为$_SERVER['REMOTE_ADDR']字段的关键,只有当PHP是从浏览器中调用时才可能。在CLI模式下(例如,从终端与cron运行),IP地址是不可用的(这是有道理的,因为没有进行网络请求)。 可靠的IP地址发现 经过多年的发展,我终于坚持了这种实现方式。 function getIp(): string {…
安全应用2019-10-01T12:19:04.000Z 如果你认真地开发网络应用程序,并且该网站以后将在互联网上提供,那么解决安全问题是非常重要的。 现实上,下列威胁正等待着开发者。 应用程序有一个内部错误,例如,因为程序员在编写代码时犯了一个错误,他或她没有注意到,或者它只是 "有时 "表现出来 服务器有一个错误的配置或环境已经改变,因为服务器管理员改变了服务器的行为,而网站没有适应它。或者,我们正在部署到一个新的机器上,不知道确切的配置。 有人试图攻击**,要么是外部攻击者,要么是系统内的前雇员。 所有情况都是非常不愉快的,需要立即采取行动。设计…
散列过程(与加密相反)从输入中产生一个输出,从该输出中不能再得出原始字符串。 因此,它非常适用于保护敏感字符串、密码和校验。 散列函数的另一个很好的特点是,它们总是产生相同长度的输出,输入的一个小变化总是完全改变整个输出。 哈希函数 在 PHP 中有许多哈希函数,重要的有:。 Bcrypt: password_hash() - 最安全的密码散列,计算速度很慢,使用内部盐和迭代散列。 md5() - 非常快的函数,适合于文件散列。输出始终为32个字符。 sha1() - 用于文件散列的快速散列函数…
警告:这篇文章是多年前写的,一些信息可能已经过时或不正确。阅读时请牢记这一点。 凯撒密码是最简单的散列函数之一。在它的时代,它几乎是牢不可破的,但在现代计算机时代,只需要几十秒,甚至几分钟,就可以打破它。它基于一个密钥,根据该密钥对信息进行加密,然后根据该密钥可以再次扩展。因此,密钥是秘密的。在加密的时候,信息可以被看到,将没有任何意义(只是一个杂乱的字符)。破解密码的唯一方法是猜出密钥。 关键 密钥可以是任何数字少于信息本身的整数。通常会给出3个有效数字(所以有999种组合)。每增加一个数字都…
MD5是一个非常常用的计算哈希值的函数。 初学者经常将其用于密码散列,这并不是一个好主意,因为有许多方法可以检索到原始密码。 本文介绍了这样做的具体方法。 时间的复杂性 所有的安全都是建立在尝试所有密码所需的时间过长这一事实之上。嗯,应该这样。特别是md5()算法的问题是,它是一个非常快的函数。在一台正常的计算机上,每秒计算超过一百万个哈希值是没有问题的。 如果我们通过逐一尝试组合来破解密码,这就是**的暴力攻击。 裂解方法 有几种策略。 顺序试错(蛮力攻击)。 测试字典密码 彩虹表(预先计算的…
通常情况下,我们可能想在一个页面上附加一个文件,而这个文件已经存储在其他地方的磁盘上。如果我们直接在attach函数中输入它的确切名称,就没有什么可担心的。 安全地附加一个文件 include 'menu.html'; 前面的写法是完全安全的,因为我们总是挂载同一个文件。在这种情况下不能发生安全错误。唯一可能发生的问题是没有menu.html文件,这将触发一条警告信息(反正可能不会出现),但这种情况很少,因为我们通常会附上一个几乎确定存在的文件。 根据模式附加一个文件 但是,如果,比如说,我们想…
添加斜杠2019-08-22T18:48:46.000Z 支持PHP4、PHP5 addcslashes - C风格的斜线字符串 描述 string addcslashes (string $str, string $charlist) 返回一个在charlist参数中指定的字符前带有反斜线的字符串。 参数 str 文本字符串 charlist 要删除的字符。如果charlist包含字符n,r,和其他字符,它们将被转换为C-style。其他长度小于32和大于126的非字母数字ASCI字符的变化。 当你在charlist参数中定义一个字符序列时,确保你知…