python

1.python中re模塊中search與match的區別
    match()函數是在string開始位置匹配,如果不匹配,則返回None
    search()會掃描整個string查找匹配;也就是說match()只有在0位置匹配成功的話才會返回
2.python中is和==的區別
     is和==都是對對象進行比較判斷作用的,但對對象比較判斷的內容並不相同。

    ==是Python標準操作中的比較操作符,用來比較兩個對象的value是否相等
    is判斷對象的唯一身份標識,也就是id是否相同
3.python中單例模式與工廠模式
    單例模式(singleton Pattern)是一種常用的軟件設計模式,該模式的主要目的是確保某一個類只有一個實例存在。
     
    在Python中,我們可以使用多種方法來實現單例模式:
    1)使用模塊
        可以參考自定義增刪組件site對象,很明顯的單例模式
     2)使用new
        class Singleton:
            def __init__(self,name):
                self.name =name
            def __new__(cls,*args,**kw):
                if not hasattr(cls,'_instance'):
                    orig = super(Singleton,cls)
                    cls._instance = orig.__new__(cls)
                return cls_instance
      3)利用類實現單例
      4)基於metaclass方式實現
4.python貪婪匹配與非貪婪匹配
    貪婪匹配:在匹配字符串時總是嘗試匹配更多的字符
    非貪婪匹配:在匹配時總是嘗試匹配盡可能少的字符

    python中默認採用貪婪匹配
5. Python中匿名函數
    lanbda函數,有些函數只是臨時使用,如果業務邏輯很簡單,沒必要給它取個名字
6. python中copy和deepcopy
    copy对于一个复杂对象的子对象并不会完全复制,
    deepcopy的时候会将复杂对象的每一层复制一个单独的个体出来。
7.sql注入
    sql注入是比較常見的網絡攻擊方式之一,它不是利用操作系統的BUG來實現攻擊,而是針對程序員編寫時的疏忽,通過SQL語句,實現無賬號登錄,甚至篡改數據庫
    SQL注入攻擊的總體思路
    一,尋找SQL注入的位置
    二。判斷服務器類型和後台數據庫類型
    三,針對不同的服務器和數據庫特點進行 SQL注入攻擊

    SQL注入攻擊實例
    String sql = "select * from user_table where username=
' "+userName+" ' and password=' "+password+" '";

--当输入了上面的用户名和密码,上面的SQL语句变成:
SELECT * FROM user_table WHERE username=
'’or 1 = 1 -- and password='"""
--分析SQL语句:
--条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;

--然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都--能正确执行,用户轻易骗过系统,获取合法身份。
--这还是比较温柔的,如果是执行
SELECT * FROM user_table WHERE
username='' ;DROP DATABASE (DB Name) --' and password=''
--其后果可想而知…
"""
防禦SQL注入
sql注入防御,归类起来主要有以下几点:

以上便是sql注入的原理。他通过传递一些恶意的参数来破坏原有的sql语句以便达到自己的目的。当然sql注入远远没有这么简单,我们现在讲到的只是冰山一角。那么如何防御sql注入呢?

1. 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双'-'进行转换等。

2. 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。比如:


3. 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。

4. 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。

5. 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。


    

 

8.python中的迭代器
 1)可以直接作用于for循環的數據類型
    第一類:集合數據類型,如list,tuple,dict,set,str等
    第二類:generator,包括集合定義generator和帶yield的generator(也就是generator function)
    以上這些可以直接作用于for循環的對象統稱為可迭代對象:iterable
 2)迭代器(Iterator)
    generator不但可以作用于for循環,還可以被next()函數不斷調用並返回下一個值,最後拋出stopIteration錯誤表示無法繼續返回下一個值。
    可以被next()調用並不斷返回下一個值得對象成為迭代器(Iterator)

 

posted @ 2020-07-30 17:38  yefan0323  阅读(72)  评论(0编辑  收藏  举报