异或是一种逻辑运算,运算法则简言之就是:两个条件相同(同真或同假)即为假(0),两个条件不同即为真(1),null与任何条件做异或运算都为null,如果从数学的角度理解就是,空集与任何集合的交集都为空。
mysql里异或运算符为^ 或者 xor
两个同为真的条件做异或,结果为假
![xor1.jpg wKiom1V6bq_iUkcwAABEQlyQkaU645.jpg](/sites/default/files/ueditor/1/upload/catcher/20180311/1520750352640567.jpg)
两个同为假的条件做异或,结果为假
![xor3.jpg wKiom1V6by7B3J18AAA-9bDKeD4079.jpg](/sites/default/files/ueditor/1/upload/catcher/20180311/1520750352342905.jpg)
一个条件为真,一个条件为假,结果为真
![xor2.jpg wKioL1V6cRDwT65LAABGRaNw770989.jpg](/sites/default/files/ueditor/1/upload/catcher/20180311/1520750353897156.jpg)
null与任何条件(真、假、null)做异或,结果都为null
![xor4.jpg wKioL1V6cVLCp0AtAADUa31dzbA518.jpg](/sites/default/files/ueditor/1/upload/catcher/20180311/1520750353861008.jpg)
说这么多有什么用呢?遇到一个异或的sql注入,就是用这种方法去判断的。
以下是携程某分站的一个例子,作为研究技术的参考:
条件为假的时
![xc.jpg wKiom1WI8a6xnNNoAAS8PgWuvEQ784.jpg](/sites/default/files/ueditor/1/upload/catcher/20180311/1520750354682778.jpg)
条件为真时
![xiecheng.jpg wKioL1WI85zhbWOxAALnY7yLkV8460.jpg](/sites/default/files/ueditor/1/upload/catcher/20180311/1520750354959976.jpg)