Maison > Questions et réponses > le corps du texte
Il y a maintenant 3 questions :
Si j'ai le code HTML suivant qui doit être stocké dans un certain champ de la table de la base de données, dois-je l'enregistrer directement ? Ou dois-je l'encoder puis l'enregistrer ? Demandez conseil à Dieu ! Si vous souhaitez encoder, quelle méthode utiliser ? Merci de me donner le code spécifique, merci
<!-- Bouton JiaThis COMMENCER --->
<script type="text/javascript" src="http://v3.jiathis.com/code/jiathis_r.js?move=0" charset="utf-8"></script>
<!-- Bouton JiaThis FIN -->
Si je souhaite enregistrer une chaîne au format JSON dans un champ d'une table de base de données, dois-je l'encoder avant de l'enregistrer ? Ou déposer directement ?
Y a-t-il autre chose auquel il faut prêter attention lors du stockage des données dans la base de données ? S'il vous plaît, donnez-moi quelques conseils, merci
PHP中文网2017-05-16 13:03:20
Le code html
utilise généralement des stripcslashes
pour échapper ses fragments dans la bibliothèque, les retirer et utiliser des addcslashes
pour les restaurer, et en trouver des ouverts bibliothèque de classes xss
de filtrage de source, telle que html
代码一般使用 stripcslashes
对其片段转义入库,取出用addcslashes
还原,找一些开源的过滤 xss
的类库,如
如果是JSON
格式的字符串的话直接存就行了
避免SQL
注入请使用PDO
的预处理 http://php.net/manual/zh/book...
贴段简单的防XSS
JSON
, enregistrez-la simplement directement🎜
🎜🎜Pour éviter l'injection SQL
, veuillez utiliser le prétraitement de PDO
http://php.net/manual/zh/book...🎜
🎜Publiez un moyen simple d'empêcher le XSS
🎜
<?php
function RemoveXSS($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as <javarrreeescript>
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
// straight replacements, the user should never need these since they're normal characters
// this prevents like <IMG SRC=@avascript:alert('XSS')>
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:?+/={}[]-_|\'\';
for ($i = 0; $i < strlen($search); $i++) {
// ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values
$val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/(�{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}
// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);
$found = true; // keep replacing as long as the previous round replaced something
while ($found == true) {
$val_before = $val;
for ($i = 0; $i < sizeof($ra); $i++) {
$pattern = '/';
for ($j = 0; $j < strlen($ra[$i]); $j++) {
if ($j > 0) {
$pattern .= '(';
$pattern .= '(&#[xX]0{0,8}([9ab]);)';
$pattern .= '|';
$pattern .= '|(�{0,8}([9|10|13]);)';
$pattern .= ')*';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
return $val;
}
PHPz2017-05-16 13:03:20
Premièrement, introduire js dans le code et le stocker directement dans la base de données sans le traiter est un comportement très irrationnel. Veuillez le résoudre de la manière suivante
1 : convertissez les informations, les caractères htmlspecialchars et le html en entités, puis enregistrez-les dans la base de données. Cette méthode est paresseuse et facile à contourner
2 : utilisez des expressions régulières pour obtenir le contenu de src et enregistrez-le dans la base de données