各位大大好
小弟接手維護一套Classic ASP老網站
發現其中存在大大小小SQL Injection漏洞
URL注入部分已自行處理好了
但是登入表單仍有問題
以前是使用身分證號作為登入密碼
也同樣用JS在擋Inject
但最近改成亂數密碼.如(H38a8BM46w)
原本的JS自然會造成無法登入
但實在不知如何修改...
想向各位大神請益
謝謝
.....
以下附上原始程式碼
function checkvalue() {
var tmp = login.id.value.toLowerCase();
var passwordtmp = login.password.value.toLowerCase();
if (passwordtmp.length < 10) {
alert("請輸入10碼的密碼 (身分證號碼)!");
return false;
}
if (passwordtmp.substring(0, 1) < "a" || passwordtmp.substring(0, 1) > "z") {
alert("密碼請使用英文字母開頭");
return false;
}
for (p = 2; p < passwordtmp.length; p++) {
tmp2 = passwordtmp.substring(p, p + 1);
if (tmp2 < "0" || tmp2 > "9") {
alert("密碼後8碼請使用數字,請勿使用其他文字");
return false;
}
}
return true;
}
為什麼是在前端擋?
Injection不是後端的問題嗎?
回覆小魚大大
因為後段被改到亂七八糟
只好用前端最粗淺的方式擋
至少內部系統比較不會有人想破解它
謝謝回覆
如果是內部系統,
可能會比較安全一點吧...
我好奇你的問題是甚麼?
看不懂它在寫甚麼嗎?
那你還是先從基本的程式跟JavaScript開始學,
才不會改好了一個,
又改壞了另外一個...
不是不是
原本那串JS也是我寫的
只是密碼格式改掉之後有點迷茫
不知道怎麼改能考慮才是最周到的
不會擋了這個放了另一個
或者不小心搞砸系統
謝謝回覆~
force大大的方法應該是可行的,
因為你原本的判斷方式不能用了,
變成每個都可能是英文或數字.
如果要防SQL Injection應該也是可以,
(排除對方連js都改掉的情況)
畢竟你已經把空白跟特殊符號過濾掉了.
題外話,
如果哪個年輕小夥子能把js都能改掉,
邀請他來做IT吧.
你這樣只有在前端做檢查使用者輸入而已,不建議。改了跟沒改一樣,說真的還不如繼續用舊的
function checkvalue() {
var re = /^[a-zA-Z0-9]{10}$/
if (re.test(login.password.value)) {
return true;
} else {
alert("密碼格式不符");
return false
}
}
老職員阿姨伯伯們"應該"不會想去搞這些...
這些阿姨伯伯們更不會去搞什麼injecting...
依你主管的邏輯,根本不用改好嗎?XD
用亂數密碼代表沒規則,所以不用想東想西,只要避免輸入空值,沒登入成功顯示失敗就好,這也不叫防 SQL Injection,純粹防呆
這只是資料格式的檢查驗證
跟 SQL Injection 沒什麼搭嘎
function checkvalue() {
var tmp = login.id.value.toLowerCase();
var passwordtmp = login.password.value.toLowerCase();
if (passwordtmp.length < 10) {
alert("請輸入10碼的密碼!");
return false;
}
//Regular Expression for Alpha-Numeric
var pattern=/^[a-zA-Z0-9]+$/;
//If the inputString is NOT a match
if (!pattern.test(passwordtmp)) {
alert("not a match");
return false;
}
return true;
}
啊大大抱歉...
我突然意識到我好像問錯了...
是防 'or 1=1 -- 這種攻擊啦
也算是 SQL Inject攻擊吧
謝謝回覆
誠如上面各位高手所說
要防 "or 1=1" 這種攻擊
要修改的是 server 端的程式
而不是 javascript
了解!這我會再跟主管溝通
主要是想防"試試手氣"的年輕同仁
我也在想長輩們應該沒這麼閒
沒事搞攤內部系統應該沒太大好處
因目前主管認為重整老程式還要花時間
折衷處理改用JS當前端守門員
謝謝回覆~
ㄜ...個人覺得能知道SQL Injection
還知道 "or 1=1" 手癢想試試
只守前端應該也沒用吧
當警告也許還可以
但後端應該也要防一下
直接紀錄是哪位小可愛 約來一起聊聊