Sunday, July 31, 2022

[軟體工程] 需求分析

軟體的需求分析必須要有對原業務的一個深入瞭解、提取、抽象、昇華的過程,管理軟體需求分析尤其如此。

按照軟體工程對軟體開發過程的描述,需求階段我們可以細分為需求調研和需求分析兩個小階段

需求調研需要充分細緻的瞭解客戶目標,使用者業務內容、流程 等,這是一個對需求的採集過程,是進行需求分析的基礎準備。當我們已經瞭解、理解了使用者的業務,於是可以開始分析需求了。

軟體系統的需求分析可以由產品工程師或系統分析員或兩者分階段合作完成全部的需求分析工作。

一、 提取出核心、主要、急迫的業務,明晰業務流程



二、 運用管理 思想,優化業務流程


https://www.w3study.wiki/a/202105/83692.html

[軟體工程] index

軟體需求

需求分析

[軟體工程] 軟體需求

軟體需求分為三大部分

1. 功能需求:指系統需要完成那些事情,即向使用者提供那些功能。

2. 非功能需求:指產品所具備的品質和屬性,比如可靠性、擴充套件性、響應時間、效能等等..

3. 設計約束:也稱條件約束、補充規則。比如使用者要安裝該產品他需要有什麼樣的必備條件。(系統對作業系統的要求、硬體環境的要求等等…..)

需求調查與問題定義

在做需求調查時需要做到兩W一H即 What、Where、How

1. What—–應該收集什麼資訊

2. Where—-從什麼地方收集

3. How——-用什麼機制或技術來收集

需求分析通常包括七個方面

1. 繪製系統上下文範圍關係圖:主要用於定義系統與系統外部實體間的界限和介面的簡單模型,他可以為需求確定一個範圍。其實就是DFD的0層圖

2. 建立使用者介面原型:這裡我們可以把他看成是使用者操作的一個雛形,什麼意思呢就是我們通常所說的介面使用者通過一系列的操作完成他想達到的效果的介面。

3. 分析需求的可行性:這個需求我們應該用什麼技術解決,他實現後的效能怎麼樣,是否與其他需求相重合或是矛盾,這裡一定要注意不要把系統的這個需求怎麼用程式碼實現想進去。在需求分析時應多注意需求本身是否有用不必考慮怎麼實現

4. 確定需求的優先順序:可採用滿意度/不滿意度指標來說明(滿意度1-5表示當需求被實現時使用者的滿意程度;不滿意度取值同理)

5. 為需求建立模型:這裡可以用UML建立用例圖或是E-R圖再加上少量的文字描述。

6. 使用質量功能調配(QFD):這裡我的理解是分析員根據需求的理解發現隱藏需求而這些需求是使用者也沒有想到的需求,系統實現後會給使用者一個驚喜,而沒實現使用者也不會有抱怨。

7. 

https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/632692/

Sunday, May 22, 2022

[反爬蟲原理與繞過實戰] 签名验证反爬虫的原理和绕过方法 (包含時間戳和 MD5 加密值)

 一个并发网络爬虫

Tornado web应用的结构

Python 建立簡單的 Tornado Web

page 121

[反爬蟲原理與繞過實戰] Cookie 與 JavaScript 結合

假设访问网站/verify/cookie/content.html必须携带一个符合规定的 cookie,如果cookie不符合规定,则会被重定向到/verify/cookie/index.html去设置一个cookie,有了cookie后才能继续访问content.html。

这种方法很常见,就好比淘宝,在访问其商品列表页面前,必须登录且信息无误后才能继续访问,这种方法不仅能增加用户数,还能实现反爬。

反爬

我起初猜测它可能是这样实现的:在content.html加入一段JavaScript代码,使其能获取请求头中的cookie并判断是否符合规定,如果不符合则重定向到index.html,然后在index.html内插入一些JavaScript算法来生成cookie。

content.html

========================================================================

<body>

    <h1>This is cookie/content.html</h1>

    <script>

        var reg = /auth=[0-9]{3}[A-Z]{5}[0-9]{6}[A-Z]{3}/

        // 如果Cookie不符合要求,则跳转到首页

        if (reg.test(document.cookie) != true) {

            location.href = './index.html';

        }

    </script>

</body>

========================================================================

用浏览器测试了一下,确实可以实现重定向的操作,但是还是会先访问content.html。这种做法只能起到增长用户的目的,并不能实现反爬虫,因为python是没有JavaScript解释器的,它不会解析js代码,对于这种页面还是照爬无误。

所以还是得靠nginx,继续修改一下配置

========================================================================

location /verify/cookie/index.html {

    root /home/pineapple/Code/WebProject/www;

    index index.html;

}


location /verify/cookie/content.html {

    if ($http_cookie !~* "auth=[0-9]{3}[A-Z]{5}[0-9]{6}[A-Z]{3}") {

        rewrite content.html ./index.html redirect;

    }

    root /home/pineapple/Code/WebProject/www;

    index content.html;

  }

========================================================================

為了在重定向后给客户端设置cookie,需要在index.html里加入JavaScript代码

進行測試會發現 Cookie 值是隨機變化的

========================================================================

<!--

 * @Date         : 2020-10-22 22:38:37

 * @LastEditors  : Pineapple

 * @LastEditTime : 2020-10-23 17:30:20

 * @FilePath     : /www/verify/cookie/index.html

 * @Blog         : https://blog.csdn.net/pineapple_C

 * @Github       : https://github.com/Pineapple666

-->

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

</head>


<body>

    <h1>This is cookie/index.html</h1>

    <h1><a href="./content.html">Go to cookie/content.html</a></h1>

    <script id="random cookie">

        function randcookie() {

            // 生成随机字符串用作cookie值

            var header = randints(9, 3, 0);

            var middle = randstrs(5);

            var footer = randints(9, 6, 0);

            var pp = randstrs(3);

            var res = header + middle + footer + pp

            return res;

        }

        function randints(r, n, tof) {

            /* 生成随机数字,tof决定返回number类型或者字符串类型

               r 代表数字范围 n 代表数量

            */


            var result = [];

            if (tof) {

                return Math.floor(Math.random() * r);

            }

            for (var i = 0; i < n; i++) {

                s = Math.floor(Math.random() * r);

                result.push(s);

            }

            return result.join('');

        }


        function randstrs(n) {

            // 生成随机字母,n为随机字母的数量

            var result = [];

            for (var i = 0; i < n; i++) {

                s = String.fromCharCode(65 + randints(25, 1, 1));

                result.push(s);

            }

            return result.join('');

        }

        // 设置Cookie

        document.cookie = 'auth=' + randcookie();

    </script>

</body>


</html>

========================================================================


n8n index

 【n8n免費本地端部署】Windows版|程式安裝x指令大補帖  【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能