Spaces:
Runtime error
Runtime error
import streamlit as st | |
import pandas as pd | |
import numpy as np | |
import pickle | |
import base64 | |
import seaborn as sns | |
import matplotlib.pyplot as plt | |
import symbol | |
st.write(""" | |
# WebPhishing Detection App | |
WebPhishing Detection App adalah sebuah aplikasi untuk mendeteksi sebuah Phishing pada situs web. | |
Aplikasi ini menggunakan berbagai macam paramater untuk menujukan bahwa situs Phishing atau Normal | |
""") | |
url_dataset = f'<a href="phishing.csv">Download Dataset CSV File</a>' | |
st.markdown(url_dataset, unsafe_allow_html=True) | |
def user_input_features() : | |
UsingIP = st.sidebar.selectbox('UsingIP', ('YA', 'Tidak')) | |
LongURL = st.sidebar.selectbox('LongURL', ('YA', 'Tidak')) | |
ShortURL = st.sidebar.selectbox('Short URL', ('YA', 'Tidak')) | |
Symbol = st.sidebar.selectbox('Symbol', ('YA', 'Tidak')) | |
Redirecting = st.sidebar.selectbox('Redirecting', ('YA', 'Tidak')) | |
PrefixSuffix = st.sidebar.selectbox('PrefixSuffix', ('YA', 'Tidak')) | |
SubDomains = st.sidebar.selectbox('SubDomains', ('YA', 'Tidak')) | |
HTTPS = st.sidebar.selectbox('HTTPS', ('YA', 'Tidak')) | |
DomainRegLen = st.sidebar.selectbox('DomainRegLen', ('YA', 'Tidak')) | |
Favicon = st.sidebar.selectbox('Favicon', ('YA', 'Tidak')) | |
NonStdPort = st.sidebar.selectbox('NonStdPort', ('YA', 'Tidak')) | |
HTTPSDomainURL = st.sidebar.selectbox('HTTPSDomainURL', ('YA', 'Tidak')) | |
RequestURL = st.sidebar.selectbox('RequestURL', ('YA', 'Tidak')) | |
AnchorURL = st.sidebar.selectbox('AnchorURL', ('YA', 'Tidak')) | |
LinksInScriptTags = st.sidebar.selectbox('LinksInScriptTags', ('YA', 'Tidak')) | |
ServerFormHandler = st.sidebar.selectbox('ServerFormHandler', ('YA', 'Tidak')) | |
InfoEmail = st.sidebar.selectbox('InfoEmail', ('YA', 'Tidak')) | |
AbnormalURL = st.sidebar.selectbox('AbnormalURL', ('YA', 'Tidak')) | |
WebsiteForwarding = st.sidebar.selectbox('WebsiteForwarding', ('YA', 'Tidak')) | |
StatusBarCust = st.sidebar.selectbox('StatusBarCust', ('YA', 'Tidak')) | |
DisableRightClick = st.sidebar.selectbox('DisableRightClick', ('YA', 'Tidak')) | |
UsingPopupWindow = st.sidebar.selectbox('UsingPopupWindow', ('YA', 'Tidak')) | |
IframeRedirection = st.sidebar.selectbox('IframeRedirection', ('YA', 'Tidak')) | |
AgeofDomain = st.sidebar.selectbox('AgeofDomain', ('YA', 'Tidak')) | |
DNSRecording = st.sidebar.selectbox('DNSRecording', ('YA', 'Tidak')) | |
WebsiteTraffic = st.sidebar.selectbox('WebsiteTraffic', ('YA', 'Tidak')) | |
PageRank = st.sidebar.selectbox('PageRank', ('YA', 'Tidak')) | |
GoogleIndex = st.sidebar.selectbox('GoogleIndex', ('YA', 'Tidak')) | |
LinksPointingToPage = st.sidebar.selectbox('LinksPointingToPage', ('YA', 'Tidak')) | |
StatsReport = st.sidebar.selectbox('StatsReport', ('YA', 'Tidak')) | |
# phishingYT01 = 1 | |
#if(phishingYT == 'Left') : | |
#phishingYT01 = 0 | |
usingip = -1 | |
if(UsingIP == 'YA') : | |
usingip = 1 | |
longurl = -1 | |
if(LongURL == 'YA') : | |
longurl =1 | |
shorturl = -1 | |
if(ShortURL == 'YA') : | |
shorturl =1 | |
symbol = -1 | |
if(Symbol == 'YA') : | |
symbol =1 | |
redirecting = -1 | |
if(Redirecting == 'YA') : | |
redirecting =1 | |
subdomains = -1 | |
if(SubDomains == 'YA') : | |
subdomains =1 | |
prefixsuffix = -1 | |
if(PrefixSuffix == 'YA') : | |
prefixsuffix =1 | |
https = -1 | |
if(HTTPS == 'YA') : | |
https =1 | |
domainreglen = -1 | |
if(DomainRegLen == 'YA') : | |
domainreglen =1 | |
favicon = -1 | |
if(Favicon == 'YA') : | |
favicon =1 | |
nonstdport = -1 | |
if(NonStdPort == 'YA') : | |
nonstdport =1 | |
httpsdomainurl = -1 | |
if(HTTPSDomainURL == 'YA') : | |
httpsdomainurl =1 | |
requesturl = -1 | |
if(RequestURL == 'YA') : | |
requesturl =1 | |
anchorurl = -1 | |
if(AnchorURL == 'YA') : | |
anchorurl =1 | |
linksinscripttags = -1 | |
if(LinksInScriptTags == 'YA') : | |
linksinscripttags =1 | |
serverformhandler = -1 | |
if(ServerFormHandler == 'YA') : | |
serverformhandler =1 | |
infoemail = -1 | |
if(InfoEmail == 'YA') : | |
infoemail =1 | |
abnormalurl = -1 | |
if(AbnormalURL == 'YA') : | |
abnormalurl =1 | |
websiteforwarding = 0 | |
if(WebsiteForwarding == 'Tidak') : | |
websiteforwarding = 0 | |
statusbarcust = -1 | |
if(StatusBarCust == 'YA') : | |
statusbarcust =1 | |
disablerightclick = -1 | |
if(DisableRightClick == 'YA') : | |
disablerightclick =1 | |
usingpopupwindow = -1 | |
if(UsingPopupWindow == 'YA') : | |
usingpopupwindow =1 | |
iframeredirection = -1 | |
if(IframeRedirection == 'YA') : | |
iframeredirection =1 | |
ageofdomain = -1 | |
if(AgeofDomain == 'YA') : | |
ageofdomain =1 | |
dnsrecording = -1 | |
if(DNSRecording == 'YA') : | |
dnsrecording =1 | |
websitetraffic = -1 | |
if(WebsiteTraffic == 'YA') : | |
websitetraffic =1 | |
pagerank= -1 | |
if(PageRank== 'YA') : | |
pagerank =1 | |
googleindex = -1 | |
if(GoogleIndex == 'YA') : | |
googleindex =1 | |
linkspointingtopage= -1 | |
if(LinksPointingToPage== 'YA') : | |
linkspointingtopage =1 | |
statsreport= -1 | |
if(StatsReport== 'YA') : | |
statsreport =1 | |
#data = {'phishingYT':[phishingYT01], | |
data = { | |
'UsingIP':[usingip], | |
'LongURL':[longurl], | |
'ShortURL':[shorturl], | |
'Symbol@':[symbol], | |
'Redirecting//':[redirecting], | |
'SubDomains':[subdomains], | |
'PrefixSuffix-':[prefixsuffix], | |
'HTTPS':[https], | |
'DomainRegLen':[domainreglen], | |
'Favicon':[favicon], | |
'NonStdPort':[nonstdport], | |
'HTTPSDomainURL':[httpsdomainurl], | |
'RequestURL':[requesturl], | |
'AnchorURL':[anchorurl], | |
'LinksInScriptTags':[linksinscripttags], | |
'ServerFormHandler':[serverformhandler ], | |
'InfoEmail':[infoemail], | |
'AbnormalURL':[abnormalurl], | |
'WebsiteForwarding':[websiteforwarding], | |
'StatusBarCust':[statusbarcust], | |
'DisableRightClick':[disablerightclick], | |
'UsingPopupWindow':[usingpopupwindow], | |
'IframeRedirection':[iframeredirection], | |
'AgeofDomain':[ageofdomain], | |
'DNSRecording':[dnsrecording], | |
'WebsiteTraffic':[websitetraffic], | |
'PageRank':[pagerank], | |
'GoogleIndex':[googleindex], | |
'LinksPointingToPage':[linkspointingtopage], | |
'StatsReport':[statsreport]} | |
features = pd.DataFrame(data) | |
return features | |
input_df = user_input_features() | |
phishing_raw = pd.read_csv('phishing.csv') | |
phishing_raw.fillna(0, inplace=True) | |
phishing = phishing_raw.drop(columns=['class']) | |
df = pd.concat([input_df, phishing],axis=0) | |
df = df[:1] # Selects only the first row (the user input data) | |
df.fillna(0, inplace=True) | |
features = ['UsingIP', 'LongURL', 'ShortURL', 'Symbol@', 'Redirecting//', | |
'PrefixSuffix-', 'SubDomains', 'HTTPS', 'DomainRegLen', 'Favicon', | |
'NonStdPort', 'HTTPSDomainURL', 'RequestURL', 'AnchorURL', | |
'LinksInScriptTags', 'ServerFormHandler', 'InfoEmail', 'AbnormalURL', | |
'WebsiteForwarding', 'StatusBarCust', 'DisableRightClick', | |
'UsingPopupWindow', 'IframeRedirection', 'AgeofDomain', 'DNSRecording', | |
'WebsiteTraffic', 'PageRank', 'GoogleIndex', 'LinksPointingToPage', | |
'StatsReport'] | |
df = df[features] | |
st.subheader('User Input features') | |
st.write(df) | |
load_clf = pickle.load(open('PhishingDETECT_clf.pkl', 'rb')) | |
detection = load_clf.predict(df) | |
if(detection < 0) : | |
detection = 0 | |
detection_proba = load_clf.predict_proba(df) | |
phishing_labels = np.array(['Normal', 'Phishing']) | |
st.subheader('Detection') | |
st.write(phishing_labels[detection]) | |
st.subheader('Detection Probability') | |
df_prob = pd.DataFrame(data=detection_proba, index=['Probability'], columns=phishing_labels) | |
st.write(df_prob) |