簡體   English   中英

終極字符轉義為php,javascript和mysql的列表

[英]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("&lt;","&gt;","&#38;","&#39;","&#34;","&#92;","&#36;","&#37;","&#95;","&#123;","&#125;","&#91;","&#93;","&#59;");
$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM