2015年8月19日 星期三

[Oracle] 自動滾流水號

1. create一個流水號sequence(USERS_KEY)
DROP SEQUENCE SCHEMA_NAME.USERS_KEY;

CREATE SEQUENCE SCHEMA_NAME.USERS_KEY START WITH 100 MAXVALUE 999999999999999999999999999 MINVALUE 0 NOCYCLE NOCACHE NOORDER;

2. 上述case代表, 此sequence已經用了0~99, 下次取流水號就會是100
SELECT KPI_USERS_KEY.NEXTVAL FROM DUAL

應用:
假設有一個USERS的table, 有個key的欄位, key欄位的值就可以用此方式產生
每insert一筆資料都去取下一個流水號, 可以避免產生重複的key

2015年8月13日 星期四

[IIS] 關閉SSL低強度加密演算法

參考來源
雖然走https的網頁, 資料傳輸有加密較為安全, 但是有些加密方式已被證實有瑕疵, 也就是即使加密傳輸, 有心人士一樣可以攔截後, 反解密取得封包原始內容.

如何關閉一些低強度的加密演算法
1.
regedit.exe
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers\
2.
IIS的修補方式為關閉低於128位元之加密演算法,包括以下5個子機碼:DES 56/56、NULL、RC2 40/128、RC4 40/128、RC4 56/128,在這些機碼內新增DWORD,名稱為Enabled,值為0。

[Oracle] [DBA] 追蹤table被lock的原因

1. 找出lock的session
SELECT * FROM V$LOCK WHERE BLOCK > 0 OR REQUEST > 0 ORDER BY ID1,ID2,BLOCK DESC;
2. 把上面的sid帶入 (ex: 1755)
SELECT * FROM V$SESSION WHERE SID IN ( 1755 )
3. 找出被lock的table (ex: users)
SELECT * FROM DBA_DML_LOCKS WHERE NAME='USERS'
4. 查看是什麼SQL語法造成上面table被lock
SELECT * FROM V$SQL WHERE HASH_VALUE=2803307291

[Oracle] [DBA] kill job

參考來源

1. 確認該job目前是否有正在run
SELECT * FROM DBA_JOBS_RUNNING where job=44807673

2. 先把該job disabled(take offline)
begin
 dbms_job.broken(44807673,true);
end;
3. 立即砍掉該job
ALTER SYSTEM KILL SESSION '2060,44807673' immediate;  --參數'SID, JOB'

[Oracle] string分割成multi-rows

參考來源

輸入來源如下
Name | Project | Error
108    test      Err1, Err2, Err3
109    test2     Err1
輸出結果如下
Name | Project | Error
108    Test      Err1
108    Test      Err2
108    Test      Err3
109    Test2     Err1

SQL
with temp as  (
       select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error  from dual
       union all
       select 109, 'test2', 'Err1' from dual
     )

SELECT distinct Name, Project, trim(regexp_substr(str, '[^,]+', 1, level)) str
FROM (SELECT Name, Project, Error str FROM temp) t
CONNECT BY instr(str, ',', 1, level - 1) > 0
order by Name

2015年8月12日 星期三

[ASP.NET] 前端js/後端cs互相傳值

參考來源 前端js傳值給後端cs

test.aspx(前端)
//新增一個hidden變數, 前後端pass value可透過此變數(常用手法)
<input type="hidden" id="abc" runat='server' />

//新增一個js, 把要傳給後端的參數寫到hidden變數
<script type="text/javascript">
function setvalue() {
  var a = document.getElementById("abc");
  a.value = "這是js要給後端的參數";
} 
</script>

test.aspx.cs(後端)
Label1.Text = "承接js傳過來的參數是 "+ Request.Params["abc"];


後端CS傳值給前端JS

test.aspx.cs(後端)
protected void Page_Load(object sender, EventArgs e) {
  form1.InnerHtml = "";
  for (int i = 0; i < 10; i++) {
    form1.InnerHtml += "<button onclick='send(" + i + ")'>click</button>";
  }
}

test.aspx(前端)
<script type="text/javascript">
  function send(id) {
    alert(id);
  }
</script>

[ASP] ASP/JS互相傳值

參考來源

test.asp
<script language="javascript">
  var emp_id = "<%= catchID %">"; //asp傳值給js ,其實只有這一行 
  document.form1.method = "post";
  document.form1.action = "person.asp?emp_no=" + encodeURIComponent(emp_id);
  //js把參數傳回給asp,說穿了也只是帶參數傳回而已,就上面那一行而已
  //encodeURIComponent是安全考量加的(避免類似XSS攻擊)
  //如果要回傳多參數, 再用&連接
  document.form1.submit();
</script>

防範XSS (Cross Site Scripting) 攻擊

之前寫的網頁有拿去做弱點掃描, 被掃出來發現有嚴重的XSS
請教神人同事後, 他建議我針對有傳參數的部分要進行encode(什麼是encode?)
其實我覺得XSS很類似SQL injection

先來看看可能被XSS攻擊的網頁長什麼樣子

test.html
<html>
  <form action="test.asp" method="get">
    <input name="tid" type="text" />
    <input type="submit" />
  </form>
</html>
test.asp
<html>
  <input type="text" name="get_tid" id="get_tid" value="<%= request("tid") %>" />
</html>

接著在test.html的textbox輸入下面字串
120" onMouseOver=alert('XSS_attack') size="1
Submit後, 把滑鼠游標移到test.asp的textbox上, 會出現alert視窗, 這就是比較常見的XSS攻擊

[JS] 判斷字串是否為integer


下面例子會跳出alert視窗, 顯示回傳值為false(1235.6不是整數)
<script language="javascript">
Object.prototype.isInteger = function () {
  return (this.toString().search(/^-?[0-9]+$/) == 0 ) //回傳值為true/false
}

var myNum=1235.6;
alert (myNum.isInteger());
</script>

[ASP] 接GET/POST值

ASP接HTML(GET)

test.html
<html>
  <form action="test.asp" method="get">
    <input name="tid" type="text" />
    <input type="submit" />
  </form>
</html>

test.asp
<%
response.write encodeURIComponent(request("tid"))
%>

ASP接HTML(POST)
把上面例子http method的get改成post即可
  <form action="test.asp" method="post">