-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Avoid using dangerouslySetInnerHTML #1151
Conversation
- invalid translation can break the markup - it is insecure
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks a lot for taking care.
BTW, I'd like to apologize for overlooking both, the link to this PR this morning in IRC and an old comment you wrote back in September (although I had a reason for overlooking that one 🦶) If I remember correctly, the use of As a disclaimer, I have to say that I was aware of the React recommendations and I was not comfortable with the use of such attribute. I thought I had wrote about it somewhere, but I'm not able to find these comments now. I even had a few plans in mind, like
But time, priorities and other stuff have been relegating them to background all the time. You know, I guess. Either way, right now your solution is better and straight forward, indeed. So, again, thanks a lot for the PR which, along with recently merged #1149 , completely removes the use of such a dangerous prop. And please, accept the apologies for the mentioned overlooks and/or lack of sync. |
Maybe, in the future, we can resume that idea but for warning us about open but not closed brackets in the translations. Although not sure if it payoff, but if possible most probably it would help to anticipate a malformed translation. |
Yes, that was my motivation behind this change...
I was thinking about this as well (react-markdown), but IMHO it's an overkill, we do not need full markdown support (at least in the current cases).
Probably not worth of doing that, we use this functionality at just few places and a missing bracket will cause just a cosmetic problem, not a functional or security problem. |
Prepare for releasing Agama 8. It includes the following pull requests: * #884 * #886 * #914 * #918 * #956 * #957 * #958 * #959 * #960 * #961 * #962 * #963 * #964 * #965 * #966 * #969 * #970 * #976 * #977 * #978 * #979 * #980 * #981 * #983 * #984 * #985 * #986 * #988 * #991 * #992 * #995 * #996 * #997 * #999 * #1003 * #1004 * #1006 * #1007 * #1008 * #1009 * #1010 * #1011 * #1012 * #1014 * #1015 * #1016 * #1017 * #1020 * #1022 * #1023 * #1024 * #1025 * #1027 * #1028 * #1029 * #1030 * #1031 * #1032 * #1033 * #1034 * #1035 * #1036 * #1038 * #1039 * #1041 * #1042 * #1043 * #1045 * #1046 * #1047 * #1048 * #1052 * #1054 * #1056 * #1057 * #1060 * #1061 * #1062 * #1063 * #1064 * #1066 * #1067 * #1068 * #1069 * #1071 * #1072 * #1073 * #1074 * #1075 * #1079 * #1080 * #1081 * #1082 * #1085 * #1086 * #1087 * #1088 * #1089 * #1090 * #1091 * #1092 * #1093 * #1094 * #1095 * #1096 * #1097 * #1098 * #1099 * #1100 * #1102 * #1103 * #1104 * #1105 * #1106 * #1109 * #1110 * #1111 * #1112 * #1114 * #1116 * #1117 * #1118 * #1119 * #1120 * #1121 * #1122 * #1123 * #1125 * #1126 * #1127 * #1128 * #1129 * #1130 * #1131 * #1132 * #1133 * #1134 * #1135 * #1136 * #1138 * #1139 * #1140 * #1141 * #1142 * #1143 * #1144 * #1145 * #1146 * #1147 * #1148 * #1149 * #1151 * #1152 * #1153 * #1154 * #1155 * #1156 * #1157 * #1158 * #1160 * #1161 * #1162 * #1163 * #1164 * #1165 * #1166 * #1167 * #1168 * #1169 * #1170 * #1171 * #1172 * #1173 * #1174 * #1175 * #1177 * #1178 * #1180 * #1181 * #1182 * #1183 * #1184 * #1185 * #1187 * #1188 * #1189 * #1190 * #1191 * #1192 * #1193 * #1194 * #1195 * #1196 * #1198 * #1199 * #1200 * #1201 * #1203 * #1204 * #1205 * #1206 * #1207 * #1208 * #1209 * #1210 * #1211 * #1212 * #1213 * #1214 * #1215 * #1216 * #1217 * #1219 * #1220 * #1221 * #1222 * #1223 * #1224 * #1225 * #1226 * #1227 * #1229
Problem
Using the
dangerouslySetInnerHTML
React feature is as the name suggests dangerous. It is pretty much similar to usingeval()
in the code.<b><b>
instead of<b></b>
then the bold markup is not finished and might affect the following text.<script src="http://example.com/hack.js>
tag into the translation and inject arbitrary code into the page.Solution
[]
in the plain text and find out the bold part of the text using code.<script>
tag would be escaped an displayed literately in the text. Although we review the translation pull requests it is pretty easy to overlook a<script>
tag at end of a veeeery long line unless you scroll.Testing
Screenshots
After fixing the problem it still looks exactly the same.