[英]Ultimate chars to escape list for php, javascript and mysql
許多站點使用php,javascript和mysql。 為了站點安全(不是偏執狂而是良好的安全性)(和性能),我想知道逃逸的字符,時間和方式。 這就是我現在要做的:
保存用戶提交的字符串時:
//I set the utf8 charset everywhere
$str = urldecode($str);
$str = trim($_POST['name']);
if (mb_strlen($str, 'utf-8') <= $maxsize) //{...
//remove tab, null, backspace, controlz chars
$str = str_replace(array("\t","\x00","\x08","\x1a"),"",$str);
$str = str_replace(["%","_"],["\%","\_"],$str); // if I use like in the query
//I use prepared statement to insert in db, so i dont need to escape quotes and others
$stmt = $sql->prepare("INSERT INTO atable (acol) VALUES (?)");
$stmt->bind_param('s', $str);
$stmt->execute();
現在,當使用db echo顯示來自數據庫的字符串時,也可能是javascript代碼和vars。 我將這些實體替換為:<>&'“`\\ $%{} [] _;。
$a = array("<",">","&","'",'"',"\\","$","%","_","{","}","[","]",";");
$b = array("<",">","&","'",""","\","$","%","_","{","}","[","]",";");
$str = str_replace($a,$b,$str);
echo $str;
哪里不對了? 缺少或不必要的字符?
更新
左/右單/雙引號(例如w3schools稱為em)可能很危險?
您的方法存在缺陷。
請勿嘗試通過一刀切的功能解決所有安全需求。
安全注意事項是特定於域的。 防御SQL注入與防御跨站點腳本,XPath注入,LDAP注入等需要不同的策略。
從威脅模型開始 。 如果不完全了解要解決的問題,將無法為它們創建適當的解決方案。 許多問題都有已知的解決方案。
如果您不願意列舉自己關心的漏洞,那么閱讀PHP:The Right Way的Security部分可能會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.